コード例 #1
0
        private static TerminalExpr StringTerminal()
        {
            // ["][^"]*["]

            var quotation    = (FA)'"';
            var notQuotation = (FA)((Codepoints)'"').Not();

            var @string = quotation + notQuotation.Star() + quotation;

            return(TerminalExpr.From(DfaProvision.From("string", @string)));
        }
コード例 #2
0
        private static TerminalExpr StringTerminal()
        {
            // ["][^"]*["]

            var quotation    = (Nfa)'"';
            var notQuotation = (Nfa)((Atom)'"').Not();

            var @string = quotation + notQuotation.Star + quotation;

            return(TerminalExpr.From(DfaProvision.From("string", @string)));
        }
コード例 #3
0
        private static TerminalExpr NumberTerminal()
        {
            // [-+]?[0-9]+

            var digit = (FA)('0', '9');
            var sign  = (FA)'+' | '-';

            var number = sign.Opt() + digit.Plus();

            return(TerminalExpr.From(DfaProvision.From("number", number)));
        }
コード例 #4
0
        private static TerminalExpr NumberTerminal()
        {
            // [-+]?[0-9]*[.]?[0-9]+

            var digit = (Nfa)('0', '9');
            var sign  = (Nfa)'+' | '-';
            var dot   = (Nfa)'.';

            var number = sign.Opt + digit.Star + dot.Opt + digit.Plus;

            return(TerminalExpr.From(DfaProvision.From("number", number)));
        }
コード例 #5
0
        private void Check1()
        {
            RuleExpr argument     = "argument";
            RuleExpr argumentList = "argument-list";
            RuleExpr atom         = "atom";

            var name   = TerminalExpr.From(DfaProvision.From("name", 'n'));
            var number = TerminalExpr.From(DfaProvision.From("number", '1'));

            argument.Body     = atom;
            argumentList.Body = argument | (argumentList + ',' + argument);
            atom.Body         = name | number;

            var grammar = new GrammarBuilder().From(argumentList);

            var engine = new EarleyEngine(grammar);

            engine.Pulse(XToken.Name);
            engine.Pulse(XToken.Comma);
            engine.Pulse(XToken.Number);
        }
コード例 #6
0
        public static Grammar Create()
        {
            TerminalExpr dot = ".";

            RuleExpr Start      = "start";
            RuleExpr Dot        = "dot";
            RuleExpr DotDot     = "dotdot";
            RuleExpr Dot_DotDot = "dot-dotdot";
            RuleExpr DotDot_Dot = "dotdot-dot";

            Start.Body =
                (Dot_DotDot + DotDot_Dot) |
                (DotDot_Dot + Dot_DotDot);

            Dot.Body = dot;

            DotDot.Body = Dot + Dot;

            Dot_DotDot.Body = Dot + DotDot;

            DotDot_Dot.Body = DotDot + Dot;

            return(new GrammarBuilder().From(Start));
        }
コード例 #7
0
 public static ChainExpr operator +(SymbolExpr terminal, string chars)
 {
     return(new ChainExpr {
         terminal, TerminalExpr.From((DfaProvision)chars)
     });
 }
コード例 #8
0
 public static ChainExpr operator +(SymbolExpr terminal, char @char)
 {
     return(new ChainExpr {
         terminal, TerminalExpr.From((DfaProvision)@char)
     });
 }
コード例 #9
0
 public static ChainExpr operator +(SymbolExpr terminal, char @char)
 {
     return(new ChainExpr {
         terminal, TerminalExpr.From(DfaProvision.From(@char.ToString(), @char))
     });
 }