Example #1
0
        // @formatter:off
        private Rules <object> InitRules()
        {
            return(new Rules <object>(new List <Rule <object> >
            {
                R(Parser, /**/ pl.HashLex, Lexer, pl.HashAST, Ast, pl.HashGrammar, Grammar, pl.END).C(l => ((RegexLexer)l[1], FinalizeAst(l[3]), FinalizeGrammar(l[5]))),

                R(Lexer, /**/ LexemeList).C(l => FinalizeLexer(l[0])),
                R(LexemeList, /**/ Lexeme, LexemeList).ArrayAdd <object>(1, 0),
                R(LexemeList /**/).C(l => new List <object>()),
                R(Lexeme, /**/ pl.Name, pl.Eq, pl.Regex).C(l => MakeLexeme(l[0], l[2], SymbolType.Terminal)),
                R(Lexeme, /**/ pl.Semicolon, pl.Name, pl.Eq, pl.Regex).C(l => MakeLexeme(l[1], l[3], SymbolType.Comment)),

                R(Ast, /**/ AstNode, Ast).ArrayAdd <object>(1, 0),
                R(Ast /**/).C(l => new List <object>()),
                R(AstNode, /**/ pl.Name, pl.LeftBrace, Fields, pl.RightBrace).C(l => MakeNode(l[0], "Object", l[2])),
                R(AstNode, /**/ pl.Name, pl.Colon, pl.Name, pl.LeftBrace, Fields, pl.RightBrace).C(l => MakeNode(l[0], l[2], l[4])),
                R(Fields, /**/ Field, Fields).ArrayAdd <object>(1, 0),
                R(Fields /**/).MakeArray <object>(),
                R(Field, /**/ pl.Name, pl.Colon, FieldType, pl.Semicolon).C(l => (l[0] as string, l[2] as string)),
                R(FieldType, /**/ pl.Name).C(l => l[0] as string),
                R(FieldType, /**/ pl.Star, pl.Name).C(l => '*' + (l[1] as string)),

                R(Grammar, /**/ Rule, Grammar).ArrayAdd <object>(1, 0),
                R(Grammar /**/).MakeArray <object>(),
                R(Rule, /**/ NonTerminal, pl.ArrowRight, RuleRights).C(l => FinalizeRule(l[0], l[2])),
                R(RuleRights, /**/ RuleRight, pl.Bar, RuleRights).ArrayAdd <object>(2, 0),
                R(RuleRights, /**/ RuleRight).MakeArray <object>(0),
                R(RuleRight, /**/ SymbolSequence, Callback).C(l => ((List <int>)l[0], (RuleCallback)l[1])),
                R(SymbolSequence, /**/ Symbol, SymbolSequence).ArrayAdd <int>(1, 0),
                R(SymbolSequence /**/).MakeArray <int>(),
                R(Symbol, /**/ NonTerminal).C(l => l[0]),
                R(Symbol, /**/ pl.Name).C(l => resultSd[(string)l[0], SymbolType.Terminal]),
                R(Symbol, /**/ pl.Regex).C(l => resultLexer.MatchOneToken(ParseRegexToken(l[0]))),
                R(NonTerminal, /**/ pl.LeftAngle, pl.Name, pl.RightAngle).C(l => resultSd.GetOrRegister((string)l[1], SymbolType.NonTerminal)),

                R(Callback, /**/ pl.LeftBrace, Statements, pl.RightBrace).C(l => new RuleCallback((List <RuleCallback.Instruction>)l[1])),
                R(Statements, /**/ Statement, Statements).ArrayAdd <RuleCallback.Instruction>(1, 0),
                R(Statements /**/).MakeArray <RuleCallback.Instruction>(),
                R(Statement, /**/ pl.Return, Expression, pl.Semicolon).C(l => NewReturn(l[1])),
                R(Statement, /**/ Expression, pl.ArrowLeft, Expression, pl.Semicolon).C(l => NewAdd(l[0], l[2])),
                R(Expression, /**/ pl.DollarVar, Getters).C(l => NewGetter(l[0], l[1])),
                R(Expression, /**/ FieldType, pl.LeftPar, ExprList, pl.RightPar).C(l => NewConstructor(l[0], l[2])),
                R(Getters, /**/ pl.Dot, pl.Name, Getters).ArrayAdd <string>(2, 1),
                R(Getters /**/).MakeArray <string>(),
                R(ExprList, /**/ Expression, pl.Coma, ExprList).ArrayAdd <RuleCallback.Expr>(2, 0),
                R(ExprList, /**/ Expression).MakeArray <RuleCallback.Expr>(0),
                R(ExprList /**/).MakeArray <RuleCallback.Expr>(),
            }));