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

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
Hide additional 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(&quoted)?;
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".

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 AngleBarList

Source§

impl Lex for ArgumentListContent

Source§

impl Lex for ArgumentListContentPack

Source§

impl Lex for Array

Source§

impl Lex for AssignmentArgument

Source§

impl Lex for AssignmentList

Source§

impl Lex for AssignmentListContent

Source§

impl Lex for AssignmentListContentPack

Source§

impl Lex for AugmentedOperator

Source§

impl Lex for BOF

Source§

impl Lex for BinaryOperator

Source§

impl Lex for Cell

Source§

impl Lex for Component

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 Expr

Source§

impl Lex for ExprAssign

Source§

impl Lex for ExprAssignAugmented

Source§

impl Lex for ExprAssignEvaluated

Source§

impl Lex for ExprAssignInstall

Source§

impl Lex for ExprAssignInstallMethod

Source§

impl Lex for ExprAssignInstallNew

Source§

impl Lex for ExprAssignInstallOp

Source§

impl Lex for ExprAssignOp

Source§

impl Lex for ExprAssignParallel

Source§

impl Lex for ExprAssignParallelGlobal

Source§

impl Lex for ExprAssignParallelLocal

Source§

impl Lex for ExprAssignSimple

Source§

impl Lex for ExprAssignSimpleGlobal

Source§

impl Lex for ExprAssignSimpleLocal

Source§

impl Lex for ExprCatch

Source§

impl Lex for ExprCollection

Source§

impl Lex for ExprControl

Source§

impl Lex for ExprControlBreak

Source§

impl Lex for ExprControlContinue

Source§

impl Lex for ExprControlReturn

Source§

impl Lex for ExprDebug

Source§

impl Lex for ExprDebugBreakpoint

Source§

impl Lex for ExprDebugFinish

Source§

impl Lex for ExprDebugShield

Source§

impl Lex for ExprDebugStep

Source§

impl Lex for ExprDebugTest

Source§

impl Lex for ExprFor

Source§

impl Lex for ExprForBare

Source§

impl Lex for ExprForIn

Source§

impl Lex for ExprForRange

Source§

impl Lex for ExprIf

Source§

impl Lex for ExprLambda

Source§

impl Lex for ExprLambdaList

Source§

impl Lex for ExprLambdaVariadic

Source§

impl Lex for ExprLiteral

Source§

impl Lex for ExprNew

Source§

impl Lex for ExprOp

Source§

impl Lex for ExprOpBin

Source§

impl Lex for ExprOpBinAdj

Source§

impl Lex for ExprOpBinIndex

Source§

impl Lex for ExprOpBinMember

Source§

impl Lex for ExprOpBinMemberDot

Source§

impl Lex for ExprOpBinMemberOptional

Source§

impl Lex for ExprOpBinRegular

Source§

impl Lex for ExprOpPostfix

Source§

impl Lex for ExprOpPrefix

Source§

impl Lex for ExprOption

Source§

impl Lex for ExprPack

Source§

impl Lex for ExprProfile

Source§

impl Lex for ExprProfileElapsedTime

Source§

impl Lex for ExprProfileElapsedTiming

Source§

impl Lex for ExprProfileProfile

Source§

impl Lex for ExprProfileTime

Source§

impl Lex for ExprProfileTiming

Source§

impl Lex for ExprQuote

Source§

impl Lex for ExprQuoteGlobal

Source§

impl Lex for ExprQuoteLocal

Source§

impl Lex for ExprQuoteSymbol

Source§

impl Lex for ExprQuoteThreadLocal

Source§

impl Lex for ExprQuoteThreadVariable

Source§

impl Lex for ExprThrow

Source§

impl Lex for ExprTrap

Source§

impl Lex for ExprTry

Source§

impl Lex for ExprWhile

Source§

impl Lex for FloatLiteral

Source§

impl Lex for FromInstance

Source§

impl Lex for Holder

Source§

impl Lex for IdentToken

Source§

impl Lex for IntegerLiteral

Source§

impl Lex for LeadingTrivia

Source§

impl Lex for List

Source§

impl Lex for ListStep

Source§

impl Lex for LiteralToken

Source§

impl Lex for LoopBody

Source§

impl Lex for OfClass

Source§

impl Lex for PackedContent

Source§

impl Lex for ParsedFile

Source§

impl Lex for PostfixOperator

Source§

impl Lex for PrefixOperator

Source§

impl Lex for Punct

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 Sequence

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 TokenGroup

Source§

impl Lex for TokenStream

Source§

impl Lex for TokenTree

Source§

impl Lex for TrailingTrivia

Source§

impl Lex for Trivia

Source§

impl Lex for TryFallback

Source§

impl Lex for TryFallbackExcept

Source§

impl Lex for TypeAnnotation

Source§

impl Lex for WhenCondition

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

Source§

impl<T: Lex, P: Lex> Lex for SeparatedPair<T, P>