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;
                }
            }
Example #2
0
 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;
         }
     }
 }
Example #3
0
            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
                    }
                }
                ;
            }
        }
Example #4
0
        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;
        }