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>(); }
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))))); }
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)); }
public override void EnterParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context) { Rules.Add(context.RULE_REF().GetText()); _parser = true; }
public override void ExitParserRuleSpec([NotNull] ANTLRv4Parser.ParserRuleSpecContext context) { _parser = false; }