public override void EnterSymbol([NotNull] W3CebnfParser.SymbolContext context) { var token_ref = context.SYMBOL(); if (token_ref != null) { for (var parent = context.Parent; parent != null; parent = parent.Parent) { if (parent is W3CebnfParser.LhsContext) { return; } } string id = token_ref.GetText(); List <ISymbol> list = _pd.RootScope.LookupType(id).ToList(); if (!list.Any()) { ISymbol sym = new NonterminalSymbol(id, new List <IToken>() { token_ref.Symbol }); _pd.RootScope.define(ref sym); list = _pd.RootScope.LookupType(id).ToList(); } List <CombinedScopeSymbol> new_attrs = new List <CombinedScopeSymbol>(); CombinedScopeSymbol s = new RefSymbol(new List <IToken>() { token_ref.Symbol }, list); new_attrs.Add(s); _pd.Attributes[context] = new_attrs; _pd.Attributes[token_ref] = new_attrs; } }
public override void EnterId([NotNull] ANTLRv4Parser.IdContext context) { if (context.Parent is ANTLRv4Parser.LexerCommandExprContext && context.Parent.Parent is ANTLRv4Parser.LexerCommandContext) { ANTLRv4Parser.LexerCommandContext lc = context.Parent.Parent as ANTLRv4Parser.LexerCommandContext; if (lc.GetChild(0)?.GetChild(0)?.GetText() == "pushMode") { TerminalNodeImpl term = context.GetChild(0) as TerminalNodeImpl; string id = term.GetText(); IList <ISymbol> sym_list = _pd.RootScope.LookupType(id); if (!sym_list.Any()) { ISymbol sym = new ModeSymbol(id, null); _pd.RootScope.define(ref sym); } List <CombinedScopeSymbol> ref_list = new List <CombinedScopeSymbol>(); foreach (ISymbol sym in sym_list) { CombinedScopeSymbol s = new RefSymbol(term.Symbol, sym); ref_list.Add(s); } _pd.Attributes[context] = ref_list; _pd.Attributes[context.GetChild(0)] = ref_list; } else if (lc.GetChild(0)?.GetChild(0)?.GetText() == "channel") { TerminalNodeImpl term = context.GetChild(0) as TerminalNodeImpl; string id = term.GetText(); IList <ISymbol> sym_list = _pd.RootScope.LookupType(id); if (!sym_list.Any()) { ISymbol sym = new ChannelSymbol(id, null); _pd.RootScope.define(ref sym); } List <CombinedScopeSymbol> ref_list = new List <CombinedScopeSymbol>(); foreach (ISymbol sym in sym_list) { CombinedScopeSymbol s = new RefSymbol(term.Symbol, sym); ref_list.Add(s); } _pd.Attributes[context] = ref_list; _pd.Attributes[context.GetChild(0)] = ref_list; } } }
public override void EnterCat([NotNull] lbnfParser.CatContext context) { if (context.Identifier() == null) { return; } var id = context.Identifier().GetText(); if (!(context.Parent is lbnfParser.ItemContext)) { return; } var frontier = TreeEdits.Frontier(context); List <ISymbol> prior = _pd.RootScope.LookupType(id).ToList(); if (!prior.Any()) { var listp = frontier.Select(t => t.Symbol).ToList(); ISymbol symp = new NonterminalSymbol(id, listp); _pd.RootScope.define(ref symp); prior = _pd.RootScope.LookupType(id).ToList(); } var list = frontier.Select(t => t.Symbol).ToList(); List <CombinedScopeSymbol> new_attrs = new List <CombinedScopeSymbol>(); CombinedScopeSymbol s = new RefSymbol(list, prior); new_attrs.Add(s); _pd.Attributes[context] = new_attrs; _pd.Attributes[context] = new List <CombinedScopeSymbol>() { s }; foreach (var tr in frontier) { _pd.Attributes[tr] = new List <CombinedScopeSymbol>() { s } } ; } }
public override void EnterRuleref([NotNull] ANTLRv4Parser.RulerefContext context) { TerminalNodeImpl first = context.GetChild(0) as TerminalNodeImpl; string id = context.GetChild(0).GetText(); IList <ISymbol> list = _pd.RootScope.LookupType(id); if (!list.Any()) { ISymbol sym = new NonterminalSymbol(id, first.Symbol); _pd.RootScope.define(ref sym); } List <CombinedScopeSymbol> new_attrs = new List <CombinedScopeSymbol>(); foreach (ISymbol sym in list) { CombinedScopeSymbol s = new RefSymbol(first.Symbol, sym); new_attrs.Add(s); } _pd.Attributes[context] = new_attrs; _pd.Attributes[context.GetChild(0)] = new_attrs; }