Skip to main content

Lex

Trait Lex 

Source
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§

Source

fn to_tokens(&self, output: &mut TokenStream)

Appends this value’s token trees to output.

Provided Methods§

Source

fn to_token_stream(&self) -> TokenStream

Emits this value into a fresh token stream.

Examples found in repository?
examples/parse_emit_walkthrough.rs (line 55)
54    fn to_tokens(&self, output: &mut TokenStream) {
55        output.extend(self.left.to_token_stream());
56        output.extend(self.operator.to_token_stream());
57        output.extend(self.right.to_token_stream());
58    }
59}
60
61fn main() -> Result<(), TokenParseError> {
62    let quoted = quote_m2!(left + right);
63    println!("1. quote_m2! produced:\n{quoted:#?}\n");
64
65    let parsed: Addition = parse2(quoted)?;
66    println!("2. Parse produced:\n{parsed:#?}\n");
67
68    let emitted = parsed.to_token_stream();
69    println!("3. Lex produced:\n{emitted:#?}\n");
70    println!("4. Display merged those tokens as: {emitted}");
71
72    let reparsed: Addition = parse2(emitted)?;
73    assert_eq!(reparsed, parsed);
74
75    Ok(())
76}
Source

fn to_m2(&self) -> String

Renders this value as normalized Macaulay2 source.

Examples found in repository?
examples/hierarchy_visit_emit.rs (line 28)
16fn main() -> Result<(), ParseError> {
17    let quoted = quote_m2! {
18        left + right 2
19    };
20    let source_file = parse_tokens(&quoted)?;
21    let _cell = &source_file.cells[0];
22
23    let mut collector = SymbolCollector::default();
24    collector.visit_source_file(&source_file);
25
26    println!("hierarchy: Component -> ExprPack -> Cell -> SourceFile");
27    println!("visited: {}", collector.symbols.join(", "));
28    print!("generated: {}", source_file.to_m2());
29    Ok(())
30}

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementations on Foreign Types§

Source§

impl<T: Lex + ?Sized> Lex for &T

Source§

fn to_tokens(&self, output: &mut TokenStream)

Source§

impl<T: Lex + ?Sized> Lex for Box<T>

Source§

fn to_tokens(&self, output: &mut TokenStream)

Source§

impl<T: Lex> Lex for Option<T>

Source§

fn to_tokens(&self, output: &mut TokenStream)

Source§

impl<T: Lex> Lex for Vec<T>

Source§

fn to_tokens(&self, output: &mut TokenStream)

Source§

impl<T: Lex> Lex for [T]

Source§

fn to_tokens(&self, output: &mut TokenStream)

Implementors§

Source§

impl Lex for Adj

Source§

impl Lex for AdjacentExpr

Source§

impl Lex for AngleBarList

Source§

impl Lex for Array

Source§

impl Lex for Assignment

Source§

impl Lex for AssignmentPack

Source§

impl Lex for AssignmentPackComponent

Source§

impl Lex for BinaryExpr

Source§

impl Lex for BinaryOperator

Source§

impl Lex for BreakExpr

Source§

impl Lex for Catch

Source§

impl Lex for Cell

Source§

impl Lex for Collection

Source§

impl Lex for Component

Source§

impl Lex for ContinueExpr

Source§

impl Lex for ControlFlow

Source§

impl Lex for DebugExpr

Source§

impl Lex for DebugKeyword

Source§

impl Lex for Delimiter

Source§

impl Lex for DoStep

Source§

impl Lex for EOC

Source§

impl Lex for EOF

Source§

impl Lex for ElseClause

Source§

impl Lex for Empty

Source§

impl Lex for EscapeSequence

Source§

impl Lex for EvaluatedAssignment

Source§

impl Lex for ExceptDo

Source§

impl Lex for Expr

Source§

impl Lex for ExprPack

Source§

impl Lex for FixedArity

Source§

impl Lex for FloatLiteral

Source§

impl Lex for ForLoop

Source§

impl Lex for FromInstance

Source§

impl Lex for GlobalBinding

Source§

impl Lex for GlobalParallelAssignment

Source§

impl Lex for Holder

Source§

impl Lex for IdentToken

Source§

impl Lex for IfStatement

Source§

impl Lex for Installation

Source§

impl Lex for IntegerLiteral

Source§

impl Lex for IterIn

Source§

impl Lex for IterRange

Source§

impl Lex for IterationDomain

Source§

impl Lex for LambdaExpression

Source§

impl Lex for LambdaParameters

Source§

impl Lex for LeadingTrivia

Source§

impl Lex for List

Source§

impl Lex for ListStep

Source§

impl Lex for Literal

Source§

impl Lex for LiteralToken

Source§

impl Lex for LocalBinding

Source§

impl Lex for LocalParallelAssignment

Source§

impl Lex for LoopBody

Source§

impl Lex for MethodInstallation

Source§

impl Lex for NewInstallation

Source§

impl Lex for NewStatement

Source§

impl Lex for OfClass

Source§

impl Lex for OperatorAssignment

Source§

impl Lex for OperatorExpr

Source§

impl Lex for OperatorInstallation

Source§

impl Lex for OptionExpression

Source§

impl Lex for ParallelAssignment

Source§

impl Lex for ParsedFile

Source§

impl Lex for PostfixExpr

Source§

impl Lex for PostfixOperator

Source§

impl Lex for PrefixExpr

Source§

impl Lex for PrefixOperator

Source§

impl Lex for ProfilingExpr

Source§

impl Lex for ProfilingModifier

Source§

impl Lex for Punct

Source§

impl Lex for QuoteExpression

Source§

impl Lex for QuoteSpecifier

Source§

impl Lex for RangeBoundFrom

Source§

impl Lex for RangeBoundTo

Source§

impl Lex for RawStringContent

Source§

impl Lex for RawStringElement

Source§

impl Lex for RawStringLiteral

Source§

impl Lex for ReturnExpr

Source§

impl Lex for Sequence

Source§

impl Lex for SimpleBinding

Source§

impl Lex for SourceFile

Source§

impl Lex for Statement

Source§

impl Lex for StringContent

Source§

impl Lex for StringElement

Source§

impl Lex for StringLiteral

Source§

impl Lex for Symbol

Source§

impl Lex for ThenClause

Source§

impl Lex for Throw

Source§

impl Lex for TokenGroup

Source§

impl Lex for TokenStream

Source§

impl Lex for TokenTree

Source§

impl Lex for TrailingTrivia

Source§

impl Lex for Trap

Source§

impl Lex for Trivia

Source§

impl Lex for TryFallback

Source§

impl Lex for TryStatement

Source§

impl Lex for TypeAnnotation

Source§

impl Lex for Variadic

Source§

impl Lex for WhenCondition

Source§

impl Lex for WhileLoop

Source§

impl Lex for _Add

Source§

impl Lex for _AddAdd

Source§

impl Lex for _AddAddEql

Source§

impl Lex for _AddEql

Source§

impl Lex for _Amp

Source§

impl Lex for _AmpEql

Source§

impl Lex for _And

Source§

impl Lex for _Att

Source§

impl Lex for _AttAtt

Source§

impl Lex for _AttAttEql

Source§

impl Lex for _AttAttQsm

Source§

impl Lex for _AttAttQsmEql

Source§

impl Lex for _AttEql

Source§

impl Lex for _Bng

Source§

impl Lex for _BngEql

Source§

impl Lex for _Box

Source§

impl Lex for _BoxEql

Source§

impl Lex for _Break

Source§

impl Lex for _Breakpoint

Source§

impl Lex for _Bsl

Source§

impl Lex for _BslBsl

Source§

impl Lex for _BslBslEql

Source§

impl Lex for _BslEql

Source§

impl Lex for _Catch

Source§

impl Lex for _Cdt

Source§

impl Lex for _CdtEql

Source§

impl Lex for _Cma

Source§

impl Lex for _Col

Source§

impl Lex for _ColEql

Source§

impl Lex for _Continue

Source§

impl Lex for _Crt

Source§

impl Lex for _CrtBng

Source§

impl Lex for _CrtCrt

Source§

impl Lex for _CrtCrtEql

Source§

impl Lex for _CrtEql

Source§

impl Lex for _CrtGst

Source§

impl Lex for _CrtGstEql

Source§

impl Lex for _CrtLst

Source§

impl Lex for _CrtLstEql

Source§

impl Lex for _CrtMul

Source§

impl Lex for _CrtMulMul

Source§

impl Lex for _CrtMulMulEql

Source§

impl Lex for _CrtTld

Source§

impl Lex for _Do

Source§

impl Lex for _Dot

Source§

impl Lex for _DotDot

Source§

impl Lex for _DotDotEql

Source§

impl Lex for _DotDotLst

Source§

impl Lex for _DotDotLstEql

Source§

impl Lex for _DotQsm

Source§

impl Lex for _ElapsedTime

Source§

impl Lex for _ElapsedTiming

Source§

impl Lex for _Else

Source§

impl Lex for _Eql

Source§

impl Lex for _EqlBngEql

Source§

impl Lex for _EqlEql

Source§

impl Lex for _EqlEqlEql

Source§

impl Lex for _EqlEqlEqlGst

Source§

impl Lex for _EqlEqlEqlGstEql

Source§

impl Lex for _EqlEqlGst

Source§

impl Lex for _EqlEqlGstEql

Source§

impl Lex for _EqlGst

Source§

impl Lex for _Except

Source§

impl Lex for _Finish

Source§

impl Lex for _For

Source§

impl Lex for _From

Source§

impl Lex for _Global

Source§

impl Lex for _Graded

Source§

impl Lex for _Gst

Source§

impl Lex for _GstEql

Source§

impl Lex for _GstGst

Source§

impl Lex for _GstGstEql

Source§

impl Lex for _Hsh

Source§

impl Lex for _HshQsm

Source§

impl Lex for _If

Source§

impl Lex for _In

Source§

impl Lex for _List

Source§

impl Lex for _Local

Source§

impl Lex for _Lst

Source§

impl Lex for _LstEql

Source§

impl Lex for _LstEqlEql

Source§

impl Lex for _LstEqlEqlEql

Source§

impl Lex for _LstEqlEqlGst

Source§

impl Lex for _LstEqlEqlGstEql

Source§

impl Lex for _LstLst

Source§

impl Lex for _LstLstEql

Source§

impl Lex for _LstSub

Source§

impl Lex for _Mod

Source§

impl Lex for _ModEql

Source§

impl Lex for _Mul

Source§

impl Lex for _MulEql

Source§

impl Lex for _MulMul

Source§

impl Lex for _MulMulEql

Source§

impl Lex for _New

Source§

impl Lex for _Not

Source§

impl Lex for _Of

Source§

impl Lex for _Or

Source§

impl Lex for _Pip

Source§

impl Lex for _PipEql

Source§

impl Lex for _PipPip

Source§

impl Lex for _PipPipEql

Source§

impl Lex for _PipSub

Source§

impl Lex for _PipSubEql

Source§

impl Lex for _PipUbs

Source§

impl Lex for _PipUbsEql

Source§

impl Lex for _Profile

Source§

impl Lex for _Qsm

Source§

impl Lex for _QsmQsm

Source§

impl Lex for _QsmQsmEql

Source§

impl Lex for _Return

Source§

impl Lex for _Scl

Source§

impl Lex for _Sfp

Source§

impl Lex for _SfpEql

Source§

impl Lex for _Shield

Source§

impl Lex for _Slh

Source§

impl Lex for _SlhEql

Source§

impl Lex for _SlhSlh

Source§

impl Lex for _SlhSlhEql

Source§

impl Lex for _Step

Source§

impl Lex for _Sub

Source§

impl Lex for _SubEql

Source§

impl Lex for _SubGst

Source§

impl Lex for _Symbol

Source§

impl Lex for _Test

Source§

impl Lex for _Then

Source§

impl Lex for _ThreadLocal

Source§

impl Lex for _ThreadVariable

Source§

impl Lex for _Throw

Source§

impl Lex for _Time

Source§

impl Lex for _Timing

Source§

impl Lex for _Tld

Source§

impl Lex for _TldEql

Source§

impl Lex for _To

Source§

impl Lex for _Trap

Source§

impl Lex for _Try

Source§

impl Lex for _Ubs

Source§

impl Lex for _UbsBng

Source§

impl Lex for _UbsEql

Source§

impl Lex for _UbsGst

Source§

impl Lex for _UbsGstEql

Source§

impl Lex for _UbsLst

Source§

impl Lex for _UbsLstEql

Source§

impl Lex for _UbsMul

Source§

impl Lex for _UbsTld

Source§

impl Lex for _When

Source§

impl Lex for _While

Source§

impl Lex for _Xor

Source§

impl<L: Lex, P: Lex, R: Lex> Lex for PunctPair<L, P, R>

Source§

impl<S, D> Lex for Delimited<S, D>
where S: Lex, D: DelimiterValue,

Source§

impl<S: Lex, P: Lex> Lex for Punctuated<S, P>

Source§

impl<S: Lex> Lex for Body<S>

Source§

impl<S: Lex> Lex for Terminated<S>