示例#1
0
            public override void EnterParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
            {
                Rules.Add(context);
                ITerminalNode rule_ref = context.RULE_REF();

                LHS.Add(rule_ref);
                current_nonterminal      = rule_ref;
                RHS[current_nonterminal] = new List <ITerminalNode>();
            }
示例#2
0
        public override ItemSequence VisitParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
        {
            var displayName = context.ruleModifiers()?.GetText() + context.RULE_REF();
            var comments    = context.DOC_COMMENT().Select(x => x.GetText()).Select(CreateComment).Select(x => Create($"{context.RULE_REF().GetText()} Comment", DiagramOf(x)));

            List <DiagramItem> items = new List <DiagramItem>();

            CheckAdd(context.argActionBlock(), "actions", items);
            CheckAdd(context.localsSpec(), "locals", items);
            CheckAdd(context.throwsSpec(), "throws", items);
            foreach (var prequel in context.rulePrequel())
            {
                CheckAdd(prequel, "prequels", items);
            }

            var alternatives = context.ruleBlock().ruleAltList().labeledAlt();

            if (alternatives.Length == 1)
            {
                items.Add(Transform(alternatives[0]));
            }
            else
            {
                items.Add(new Choice(0, alternatives.Select(Transform).Select(FSharpChoice <DiagramItem, string> .NewChoice1Of2)));
            }

            if (context.exceptionGroup() != null)
            {
                foreach (var handler in context.exceptionGroup().exceptionHandler())
                {
                    CheckAdd(handler, "handlers", items);
                }
                CheckAdd(context.exceptionGroup().finallyClause(), "finally", items);
            }

            CheckAdd(context.ruleReturns()?.argActionBlock(), "returns", items);


            return(comments.Concat(SequenceOf(displayName, new Sequence(items.Select(FSharpChoice <DiagramItem, string> .NewChoice1Of2)))));
        }
示例#3
0
        public override void EnterParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
        {
            int i;

            for (i = 0; i < context.ChildCount; ++i)
            {
                if (!(context.GetChild(i) is TerminalNodeImpl))
                {
                    continue;
                }

                TerminalNodeImpl c = context.GetChild(i) as TerminalNodeImpl;
                if (c.Symbol.Type == ANTLRv4Lexer.RULE_REF)
                {
                    break;
                }
            }
            if (i == context.ChildCount)
            {
                return;
            }

            TerminalNodeImpl rule_ref = context.GetChild(i) as TerminalNodeImpl;
            string           id       = rule_ref.GetText();
            ISymbol          sym      = new NonterminalSymbol(id, rule_ref.Symbol);

            _pd.RootScope.define(ref sym);
            CombinedScopeSymbol s = (CombinedScopeSymbol)sym;

            _pd.Attributes[context] = new List <CombinedScopeSymbol>()
            {
                s
            };
            _pd.Attributes[context.GetChild(i)] = new List <CombinedScopeSymbol>()
            {
                s
            };
        }
 /// <summary>
 /// Exit a parse tree produced by <see cref="ANTLRv4Parser.parserRuleSpec"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void ExitParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
 {
 }
 /// <summary>
 /// Visit a parse tree produced by <see cref="ANTLRv4Parser.parserRuleSpec"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
 {
     return(VisitChildren(context));
 }
示例#6
0
 public override void EnterParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
 {
     Rules.Add(context.RULE_REF().GetText());
     _parser = true;
 }
示例#7
0
 public override void ExitParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context)
 {
     _parser = false;
 }