public static PipelinePayload FromSlrParserPayload(SlrParserPayload slrParserPayload) { return(new PipelinePayload { Grammar = slrParserPayload.Grammar, Lexer = slrParserPayload.Lexer }); }
public void Test__NumericGrammar() { // Arrange var grammar = GrammarBuilder.New <NumericEnums.NonTerminals, NumericEnums.Terminals>() .Init() .WithStartSymbol(NumericEnums.NonTerminals.E) .WithEpsilon(NumericEnums.Terminals.Epsilon) .WithEof(NumericEnums.NonTerminals.Root, NumericEnums.Terminals.Eof) .WithProduction(NumericEnums.NonTerminals.E, x => { x.NonTerminal(NumericEnums.NonTerminals.E); x.Terminal(NumericEnums.Terminals.Multiply); x.NonTerminal(NumericEnums.NonTerminals.E); x.Order(3); }) .WithProduction(NumericEnums.NonTerminals.E, x => { x.NonTerminal(NumericEnums.NonTerminals.E); x.Terminal(NumericEnums.Terminals.Plus); x.NonTerminal(NumericEnums.NonTerminals.E); x.Order(2); }) .WithProduction(NumericEnums.NonTerminals.E, x => { x.Terminal(NumericEnums.Terminals.Number); x.Order(1); }) .Build(); var payload = new SlrParserPayload { Grammar = grammar, Lexer = x => { var map = x.GroupBy(y => y.Name) .ToDictionary(y => y.Key, y => y.First()); return(ImmutableList <ITerminal> .Empty .Add(map[NumericEnums.Terminals.Number]) .Add(map[NumericEnums.Terminals.Plus]) .Add(map[NumericEnums.Terminals.Number]) .Add(map[NumericEnums.Terminals.Multiply]) .Add(map[NumericEnums.Terminals.Number])); } }; var str = grammar.ToString(); // Act var result = _logic.Resolve(payload); var statesStr = result.States.Print(); // Assert Assert.NotEmpty(result.States); }
public PipelinePayload Resolve(SlrParserPayload pipelinePayload) { var payload = PipelinePayload.FromSlrParserPayload(pipelinePayload); var pipeline = new Pipeline <PipelinePayload>() .Add <AugmentGrammarPipelineStep>() .Add <ParseStatePipelineStep>() .Add <ParseTablePipelineStep>() .Add <LrParsePipelineStep>(); pipeline.Execute(payload); return(payload); }