示例#1
0
        protected override object OnVariableCfGrammar(ASTNode node)
        {
            var name = VisitChild <Name>(node, 0);

            var grammar = new RawGrammar(name.Text);

            foreach (var subNode in node.Children.Skip(1))
            {
                if (subNode.Symbol.ID == LinguParser.ID.VariableGrammarOptions)
                {
                    grammar.Options.AddRange(VisitChildren <Option>(subNode));
                }

                if (subNode.Symbol.ID == LinguParser.ID.VariableGrammarTerminals)
                {
                    grammar.Terminals.AddRange(VisitChildren <TerminalRule>(subNode));
                }

                if (subNode.Symbol.ID == LinguParser.ID.VariableGrammarRules)
                {
                    grammar.Nonterminals.AddRange(VisitChildren <NonterminalRule>(subNode));
                }
            }

            return(grammar);
        }
示例#2
0
        protected override object OnGrammar(INonterminalToken token)
        {
            Debug.Assert(token[0].Symbol.Id == LinguId.Identifier);
            var grammar = new RawGrammar(token.Terminal(0).Value);

            foreach (var section in token.Nonterminal(1).Children)
            {
                var children = Visit <IReadOnlyList <Symbol> >(section);

                grammar.Options.AddRange(children.OfType <Option>());
                grammar.Terminals.AddRange(children.OfType <TerminalRule>());
                grammar.Nonterminals.AddRange(children.OfType <NonterminalRule>());
            }
            return(grammar);
        }
示例#3
0
 public NonterminalBuilder(BuildGrammar buildGrammar, RawGrammar rawGrammar)
 {
     BuildGrammar = buildGrammar;
     RawGrammar   = rawGrammar;
     ToDo         = new Queue <(Nonterminal, IEnumerable <IExpression>)>();
 }
示例#4
0
 public TerminalBuilder(BuildGrammar buildGrammar, RawGrammar rawGrammar)
 {
     BuildGrammar = buildGrammar;
     RawGrammar   = rawGrammar;
 }
示例#5
0
 public GrammarBuilder(RawGrammar tree)
 {
     RawGrammar   = tree;
     BuildGrammar = new BuildGrammar(RawGrammar.Name);
 }