[−][src]Module scdlang::external
Collection of Trait for extending core functionality. Useful for creating transpiler, codegen, or even compiler.
Examples
#[derive(Default)] pub struct Machine<'a> { builder: Scdlang<'a>, // or any type that implmenet trait `Builder` schema: std::any::Any, } impl Machine<'_> { pub fn new() -> Self { let mut builder = Scdlang::new(); // insert any pre-configuration here. For example: // builder.auto_clear_cache(false) Self { builder, ..Default::default() } } } impl<'a> Parser<'a> for Machine<'a> { fn configure(&mut self) -> &mut Builder<'a> { &mut self.builder } fn parse(&mut self, source: &str) -> Result<(), DynError> { self.clean_cache()?; unimplemented!(); } fn insert_parse(&mut self, source: &str) -> Result<(), Box<dyn error::Error>> { unimplemented!(); } fn try_parse(source: &str, builder: Scdlang<'a>) -> Result<Self, Box<dyn error::Error>> { unimplemented!(); } }
- Then it can be used like this:
ⓘThis example is not tested
let parser: Box<dyn Parser> = Box::new(match args { Some(text) => module_a::Machine::try_parse(text)?, None => module_b::Machine::new(), }); parser.configure() .auto_clear_cache(false) .with_err_path("my_fsm.scl"); parser.parse("Off -> On")?; parser.insert_parse("Off <- On @ Shutdown")?; parser.configure().with_err_semantic(false); parser.parse("Off -> On @ Power")?;
Traits
Builder | A Trait to configure the |
Parser | A Trait which external parser must implement. |