pub trait Lex {
// Required method
fn to_tokens(&self, output: &mut TokenStream);
// Provided methods
fn to_token_stream(&self) -> TokenStream { ... }
fn to_m2(&self) -> String { ... }
}Expand description
Emits a typed or raw syntax value into the shared token representation.
Required Methods§
Sourcefn to_tokens(&self, output: &mut TokenStream)
fn to_tokens(&self, output: &mut TokenStream)
Appends this value’s token trees to output.
Provided Methods§
Sourcefn to_token_stream(&self) -> TokenStream
fn to_token_stream(&self) -> TokenStream
Emits this value into a fresh token stream.
Examples found in repository?
examples/parse_emit_walkthrough.rs (line 62)
61 fn to_tokens(&self, output: &mut TokenStream) {
62 output.extend(self.left.to_token_stream());
63 output.extend(self.operator.to_token_stream());
64 output.extend(self.right.to_token_stream());
65 }
66}
67
68fn main() -> Result<(), TokenParseError> {
69 let quoted = quote_m2!(left + right);
70 println!("1. quote_m2! produced:\n{quoted:#?}\n");
71
72 let parsed: Addition = parse2(quoted)?;
73 println!("2. Parse produced:\n{parsed:#?}\n");
74
75 let emitted = parsed.to_token_stream();
76 println!("3. Lex produced:\n{emitted:#?}\n");
77 println!("4. Display merged those tokens as: {emitted}");
78
79 let reparsed: Addition = parse2(emitted)?;
80 assert_eq!(reparsed, parsed);
81
82 Ok(())
83}Sourcefn to_m2(&self) -> String
fn to_m2(&self) -> String
Renders this value as normalized Macaulay2 source.
Examples found in repository?
examples/type_inference.rs (line 301)
293fn main() -> Result<(), ParseError> {
294 let file = parse_file(DEMONSTRATED_CELLS)?;
295 let mut inference = TypeInference::default();
296 inference.visit_source_file(&file);
297
298 for cell in &file.cells {
299 println!(
300 "{:<34} => {}",
301 cell.to_m2().trim_end(),
302 inference.inferred(cell)
303 );
304 }
305 Ok(())
306}More examples
examples/hierarchy_visit_emit.rs (line 32)
20fn main() -> Result<(), ParseError> {
21 let quoted = quote_m2! {
22 left + right 2
23 };
24 let source_file = parse_tokens("ed)?;
25 let _cell = &source_file.cells[0];
26
27 let mut collector = SymbolCollector::default();
28 collector.visit_source_file(&source_file);
29
30 println!("hierarchy: Expr -> PackedContent -> Cell -> SourceFile");
31 println!("visited: {}", collector.symbols.join(", "));
32 print!("generated: {}", source_file.to_m2());
33 Ok(())
34}Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".