private static ProtectionLevel ParseProtectionLevel(CrawlParser.Protection_levelContext protectionLevel)
        {
            TerminalNodeImpl tnode = (TerminalNodeImpl)protectionLevel.GetChild(0);

            switch (tnode.Payload.Type)
            {
            case CrawlLexer.PUBLIC:
                return(ProtectionLevel.Public);

            case CrawlLexer.PRIVATE:
                return(ProtectionLevel.Private);

            case CrawlLexer.PROTECTED:
                return(ProtectionLevel.Protected);

            case CrawlLexer.INTERNAL:
                return(ProtectionLevel.Internal);

            case CrawlLexer.PROTECTED_INTERNAL:
                return(ProtectionLevel.ProtectedInternal);

            default:
                throw new CrawlImpossibleStateException("Unknown protection level", protectionLevel.SourceInterval);
            }
        }
Ejemplo n.º 2
0
    private object Eval(TerminalNodeImpl arg)
    {
        if (arg.Symbol.Type == STRING)
        {
            return(arg.ToString());
        }

        if (arg.Symbol.Type == NUMBER)
        {
            return(arg.ToString());
        }

        if (arg.Symbol.Type == VARIABLE)
        {
            return(ENVIRONMENT[arg.ToString()]);
        }

        if (arg.Symbol.Type == BOOL_TRUE)
        {
            return(true);
        }

        if (arg.Symbol.Type == VARIABLE)
        {
            return(false);
        }

        throw new ChildLangRuntimeException();
    }
Ejemplo n.º 3
0
        public static TerminalNodeImpl Find(int index, Document document)
        {
            ParsingResults pd        = ParsingResultsFactory.Create(document);
            var            workspace = document.Workspace;

            if (pd.ParseTree == null)
            {
                new Module().Compile(workspace);
            }

            foreach (IParseTree node in DFSVisitor.DFS(pd.ParseTree as ParserRuleContext))
            {
                if (node as TerminalNodeImpl == null)
                {
                    continue;
                }

                TerminalNodeImpl leaf = node as TerminalNodeImpl;
                if (leaf.Symbol.StartIndex <= index && index <= leaf.Symbol.StopIndex)
                {
                    return(leaf);
                }
            }
            return(null);
        }
Ejemplo n.º 4
0
 public override List <IParseTree> VisitItem([NotNull] sexpressionParser.ItemContext context)
 {
     if (context.atom() != null)
     {
         // What *type* of token to use??? There is not enough information in the s-expression
         // to know what lexer type to use!!!
         // Run lexer on a bare string and see what we get.
         var str    = context.atom().GetText();
         var stream = new AntlrInputStream(str);
         _lexer.SetInputStream(stream);
         var token   = _lexer.NextToken();
         var new_sym = new TerminalNodeImpl(token);
         return(new List <IParseTree>()
         {
             new_sym
         });
     }
     else if (context.list() != null)
     {
         return(VisitList(context.list()));
     }
     else
     {
         throw new Exception("Cannot build an s-expr pair.");
     }
 }
Ejemplo n.º 5
0
        public void Execute(Repl repl, ReplParser.CtreeContext tree, bool piped)
        {
            var lines            = repl.input_output_stack.Pop();
            var serializeOptions = new JsonSerializerOptions();

            serializeOptions.Converters.Add(new AntlrJson.ParseTreeConverter());
            serializeOptions.WriteIndented = false;
            var           in_tuple = JsonSerializer.Deserialize <AntlrJson.ParsingResultSet>(lines, serializeOptions);
            var           nodes    = in_tuple.Nodes;
            var           lexer    = in_tuple.Lexer;
            var           parser   = in_tuple.Parser;
            StringBuilder sb       = new StringBuilder();

            foreach (var node in nodes)
            {
                TerminalNodeImpl x = TreeEdits.LeftMostToken(node);
                var ts             = x.Payload.TokenSource;
                sb.AppendLine();
                sb.AppendLine(
                    TreeOutput.OutputTree(
                        node,
                        lexer,
                        parser,
                        null).ToString());
            }
            repl.input_output_stack.Push(sb.ToString());
        }
Ejemplo n.º 6
0
 public static void Reconstruct(IParseTree tree, CommonTokenStream stream)
 {
     if (tree as TerminalNodeImpl != null)
     {
         TerminalNodeImpl tok      = tree as TerminalNodeImpl;
         Interval         interval = tok.SourceInterval;
         var inter = stream.GetHiddenTokensToLeft(tok.Symbol.TokenIndex);
         if (inter != null)
         {
             foreach (var t in inter)
             {
                 System.Console.Write(t.Text);
             }
         }
         var s = stream.GetText(interval);
         System.Console.Write(s);
     }
     else
     {
         for (int i = 0; i < tree.ChildCount; ++i)
         {
             var c = tree.GetChild(i);
             Reconstruct(c, stream);
         }
     }
 }
Ejemplo n.º 7
0
 public override void EnterId([NotNull] ANTLRv4Parser.IdContext context)
 {
     if (context.Parent is ANTLRv4Parser.ModeSpecContext)
     {
         TerminalNodeImpl term = context.GetChild(0) as TerminalNodeImpl;
         string           id   = term.GetText();
         ISymbol          sym  = new ModeSymbol(id, term.Symbol);
         _pd.RootScope.define(ref sym);
         CombinedScopeSymbol s = (CombinedScopeSymbol)sym;
         _pd.Attributes[context] = new List <CombinedScopeSymbol>()
         {
             s
         };
         _pd.Attributes[context.GetChild(0)] = new List <CombinedScopeSymbol>()
         {
             s
         };
     }
     else if (context.Parent is ANTLRv4Parser.IdListContext && context.Parent?.Parent is ANTLRv4Parser.ChannelsSpecContext)
     {
         TerminalNodeImpl term = context.GetChild(0) as TerminalNodeImpl;
         string           id   = term.GetText();
         ISymbol          sym  = new ChannelSymbol(id, term.Symbol);
         _pd.RootScope.define(ref sym);
         CombinedScopeSymbol s = (CombinedScopeSymbol)sym;
         _pd.Attributes[context] = new List <CombinedScopeSymbol>()
         {
             s
         };
         _pd.Attributes[term] = new List <CombinedScopeSymbol>()
         {
             s
         };
     }
 }
Ejemplo n.º 8
0
        public static void ParenthesizedAST(this IParseTree tree, StringBuilder sb, string file_name, CommonTokenStream stream, int level = 0)
        {
            // Antlr always names a non-terminal with first letter lowercase,
            // but renames it when creating the type in C#. So, remove the prefix,
            // lowercase the first letter, and remove the trailing "Context" part of
            // the name. Saves big time on output!
            if (tree as TerminalNodeImpl != null)
            {
                TerminalNodeImpl tok      = tree as TerminalNodeImpl;
                Interval         interval = tok.SourceInterval;

                System.Collections.Generic.IList <IToken> inter = tok.Symbol.TokenIndex >= 0 ? stream.GetHiddenTokensToLeft(tok.Symbol.TokenIndex) : null;
                if (inter != null)
                {
                    foreach (IToken t in inter)
                    {
                        StartLine(sb, file_name, tree, stream, level);
                        sb.AppendLine("( HIDDEN text=" + t.Text.PerformEscapes());
                    }
                }

                StartLine(sb, file_name, tree, stream, level);
                sb.AppendLine("( TOKEN i=" + tree.SourceInterval.a
                              + " t=" + tree.GetText().PerformEscapes());
            }
            else
            {
                string fixed_name = tree.GetType().ToString()
                                    .Replace("Antlr4.Runtime.Tree.", "");
                fixed_name = Regex.Replace(fixed_name, "^.*[+]", "");
                fixed_name = fixed_name.Substring(0, fixed_name.Length - "Context".Length);
                fixed_name = fixed_name[0].ToString().ToLower()
                             + fixed_name.Substring(1);
                StartLine(sb, file_name, tree, stream, level);
                sb.Append("( " + fixed_name);
                if (level == 0)
                {
                    sb.Append(" File=\""
                              + file_name
                              + "\"");
                }

                sb.AppendLine();
            }
            for (int i = 0; i < tree.ChildCount; ++i)
            {
                IParseTree c = tree.GetChild(i);
                c.ParenthesizedAST(sb, file_name, stream, level + 1);
            }
            if (level == 0)
            {
                for (int k = 0; k < 1 + changed - level; ++k)
                {
                    sb.Append(") ");
                }

                sb.AppendLine();
                changed = 0;
            }
        }
Ejemplo n.º 9
0
 private static void ParenthesizedAST(IParseTree tree, StringBuilder sb, Lexer lexer, Parser parser, CommonTokenStream stream, int level = 0)
 {
     // Antlr always names a non-terminal with first letter lowercase,
     // but renames it when creating the type in C#. So, remove the prefix,
     // lowercase the first letter, and remove the trailing "Context" part of
     // the name. Saves big time on output!
     if (tree as TerminalNodeImpl != null)
     {
         TerminalNodeImpl tok      = tree as TerminalNodeImpl;
         Interval         interval = tok.SourceInterval;
         IList <IToken>   inter    = null;
         if (tok.Symbol.TokenIndex >= 0)
         {
             inter = stream?.GetHiddenTokensToLeft(tok.Symbol.TokenIndex);
         }
         if (inter != null)
         {
             foreach (var t in inter)
             {
                 var ty   = tok.Symbol.Type;
                 var name = lexer.Vocabulary.GetSymbolicName(ty);
                 StartLine(sb, level);
                 sb.AppendLine("( " + name + " text=" + PerformEscapes(t.Text) + " " + lexer.ChannelNames[t.Channel]);
             }
         }
         {
             var ty   = tok.Symbol.Type;
             var name = lexer.Vocabulary.GetSymbolicName(ty);
             StartLine(sb, level);
             sb.AppendLine("( " + name + " i=" + tree.SourceInterval.a
                           + " txt=" + PerformEscapes(tree.GetText())
                           + " tt=" + tok.Symbol.Type
                           + " " + lexer.ChannelNames[tok.Symbol.Channel]);
         }
     }
     else
     {
         var x    = tree as RuleContext;
         var ri   = x.RuleIndex;
         var name = parser.RuleNames[ri];
         StartLine(sb, level);
         sb.Append("( " + name);
         sb.AppendLine();
     }
     for (int i = 0; i < tree.ChildCount; ++i)
     {
         var c = tree.GetChild(i);
         ParenthesizedAST(c, sb, lexer, parser, stream, level + 1);
     }
     if (level == 0)
     {
         for (int k = 0; k < 1 + changed - level; ++k)
         {
             sb.Append(") ");
         }
         sb.AppendLine();
         changed = 0;
     }
 }
Ejemplo n.º 10
0
        //	public void trace(int s) {
        //		if ( states==null ) states = new ArrayList<Integer>();
        //		states.add(s);
        //	}
        public virtual ITerminalNode AddChild(IToken matchedToken)
        {
            TerminalNodeImpl t = new TerminalNodeImpl(matchedToken);

            AddChild(t);
            t.parent = this;
            return(t);
        }
Ejemplo n.º 11
0
        public override void EnterInterfaceMethodDeclaration(Java9Parser.InterfaceMethodDeclarationContext context)
        {
            int i;

            for (i = 0; i < context.ChildCount; ++i)
            {
                if (context.GetChild(i) as Java9Parser.MethodHeaderContext != null)
                {
                    break;
                }
            }
            var mh = context.GetChild(i) as Java9Parser.MethodHeaderContext;
            int j;

            for (j = 0; j < mh.ChildCount; ++j)
            {
                if (mh.GetChild(j) as Java9Parser.MethodDeclaratorContext != null)
                {
                    break;
                }
            }
            var md   = mh.GetChild(j) as Java9Parser.MethodDeclaratorContext;
            var node = md.GetChild(0);
            var name = node.GetText();
            TerminalNodeImpl term = null;
            IParseTree       t    = node;

            for (; t != null; t = t.GetChild(0))
            {
                if (t is TerminalNodeImpl)
                {
                    term = t as TerminalNodeImpl;
                    break;
                }
                else if (t.ChildCount == 0)
                {
                    term = null;
                    break;
                }
            }
            ISymbol m     = new Symtab.MethodSymbol(name, term?.Symbol);
            var     scope = GetScope(NearestScope(context));

            scope.define(ref m);
            _pd.Attributes[node] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)m
            };
            _pd.Attributes[context.GetChild(0)] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)m
            };
            _pd.Attributes[context] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)m
            };
        }
Ejemplo n.º 12
0
    private double GetDoubleValue(TerminalNodeImpl t)
    {
        if (t.Symbol.Type == VARIABLE)
        {
            return(Convert.ToDouble(ENVIRONMENT[t.ToString()]));
        }

        return(double.Parse(t.GetText()));
    }
Ejemplo n.º 13
0
            public override void EnterTerminal([NotNull] ANTLRv4Parser.TerminalContext context)
            {
                TerminalNodeImpl first = context.GetChild(0) as TerminalNodeImpl;

                if (first.Symbol.Type == ANTLRv4Parser.STRING_LITERAL)
                {
                    Literals.Add(first);
                }
            }
Ejemplo n.º 14
0
 /// <summary>
 /// Constructs the AST recursively from the ANTLR Java Parser classes.
 /// </summary>
 /// <param name="ctx"></param>
 /// <returns></returns>
 public static JavaAST ConstructAST(TerminalNodeImpl ctx)
 {
     if (literals.Contains(ctx.Symbol.Type))
     {
         return(JavaAST.CreateToken(ctx.Symbol.Type, ctx.GetText()));
     }
     else
     {
         return(JavaAST.CreateToken(ctx.Symbol.Type));
     }
 }
Ejemplo n.º 15
0
        public void SetPosition(TerminalNodeImpl terminalNodeImpl)
        {
            if (LineBeg == 0)
            {
                LineBeg   = terminalNodeImpl.Symbol.Line;
                ColumnBeg = terminalNodeImpl.Symbol.Column;
            }

            LineEnd   = terminalNodeImpl.Symbol.Line;
            ColumnEnd = terminalNodeImpl.Symbol.Column + terminalNodeImpl.Symbol.StopIndex - terminalNodeImpl.Symbol.StartIndex;
        }
Ejemplo n.º 16
0
    private string GetTerminalString(TerminalNodeImpl t)
    {
        if (t.Symbol.Type == VARIABLE)
        {
            return(ENVIRONMENT[t.ToString()].ToString());
        }

        if (t.Symbol.Type == NUMBER)
        {
            return(t.GetText());
        }

        throw new ChildLangRuntimeException();
    }
Ejemplo n.º 17
0
        public override void EnterNormalInterfaceDeclaration(Java9Parser.NormalInterfaceDeclarationContext context)
        {
            int i;

            for (i = 0; i < context.ChildCount; ++i)
            {
                if (context.GetChild(i) as Java9Parser.IdentifierContext != null)
                {
                    break;
                }
            }
            var node              = context.GetChild(i) as Java9Parser.IdentifierContext;
            var id_name           = node.GetText();
            TerminalNodeImpl term = null;
            IParseTree       t    = node;

            for (; t != null; t = t.GetChild(0))
            {
                if (t is TerminalNodeImpl)
                {
                    term = t as TerminalNodeImpl;
                    break;
                }
                else if (t.ChildCount == 0)
                {
                    term = null;
                    break;
                }
            }
            ISymbol cs    = new Symtab.InterfaceSymbol(id_name, term?.Symbol);
            var     scope = GetScope(NearestScope(context));

            scope.define(ref cs);
            _pd.Attributes[node] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)cs
            };
            IScope s = (IScope)cs;

            _pd.Attributes[context.GetChild(0)] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)s
            };
            _pd.Attributes[context] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)s
            };
        }
Ejemplo n.º 18
0
        public override void EnterEnumDeclaration(Java9Parser.EnumDeclarationContext context)
        {
            int i;

            for (i = 0; i < context.ChildCount; ++i)
            {
                if (context.GetChild(i).GetText() == "enum")
                {
                    break;
                }
            }
            var node = context.GetChild(i + 1) as Java9Parser.IdentifierContext;
            TerminalNodeImpl term = null;
            IParseTree       t    = node;

            for (; t != null; t = t.GetChild(0))
            {
                if (t is TerminalNodeImpl)
                {
                    term = t as TerminalNodeImpl;
                    break;
                }
                else if (t.ChildCount == 0)
                {
                    term = null;
                    break;
                }
            }
            var     name  = node.GetText();
            ISymbol e     = new Symtab.EnumSymbol(name, term?.Symbol);
            var     scope = GetScope(NearestScope(context));

            scope.define(ref e);
            _pd.Attributes[node] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)e
            };
            _pd.Attributes[context.GetChild(0)] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)e
            };
            _pd.Attributes[context] = new List <CombinedScopeSymbol>()
            {
                (CombinedScopeSymbol)e
            };
        }
Ejemplo n.º 19
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;
         }
     }
 }
Ejemplo n.º 20
0
        public virtual void GatherDefs()
        {
            Workspaces.Document item = Item;
            string ffn             = item.FullPath;
            IGrammarDescription gd = GrammarDescriptionFactory.Create(ffn);

            if (gd == null)
            {
                throw new Exception();
            }

            for (int classification = 0; classification < gd.IdentifyDefinition.Count; ++classification)
            {
                Func <IGrammarDescription, Dictionary <IParseTree, IList <CombinedScopeSymbol> >, IParseTree, bool> fun = gd.IdentifyDefinition[classification];
                if (fun == null)
                {
                    continue;
                }

                IEnumerable <IParseTree> it = AllNodes.Where(t => fun(gd, Attributes, t));
                foreach (IParseTree t in it)
                {
                    TerminalNodeImpl x = (t as TerminalNodeImpl);
                    if (x == null)
                    {
                        continue;
                    }

                    if (x.Symbol == null)
                    {
                        continue;
                    }

                    try
                    {
                        Defs.Add(x, classification);
                        Tags.Add(x, classification);
                    }
                    catch (ArgumentException)
                    {
                        // Duplicate
                    }
                }
            }
        }
Ejemplo n.º 21
0
        public IEnumerable <TerminalNodeImpl> GetDefsLeaf(Document doc)
        {
            List <TerminalNodeImpl> result = new List <TerminalNodeImpl>();
            ParsingResults          ref_pd = ParsingResultsFactory.Create(doc);
            var workspace = doc.Workspace;

            if (ref_pd.ParseTree == null)
            {
                Compile(workspace);
            }

            foreach (KeyValuePair <TerminalNodeImpl, int> value in ref_pd.Defs)
            {
                TerminalNodeImpl key = value.Key;
                result.Add(key);
            }
            return(result);
        }
Ejemplo n.º 22
0
        public override SqlObject VisitLiteralScalarExpression([NotNull] sqlParser.LiteralScalarExpressionContext context)
        {
            Contract.Requires(context != null);
            Contract.Requires(context.ChildCount == 1);
            Contract.Requires(context.children[0].ChildCount == 1);

            TerminalNodeImpl terminalNode = (TerminalNodeImpl)(context.children[0].GetChild(0));

            SqlLiteralScalarExpression sqlLiteralScalarExpression;

            switch (terminalNode.Symbol.Type)
            {
            case sqlParser.STRING_LITERAL:
                string value = CstToAstVisitor.GetStringValueFromNode(terminalNode);
                sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlStringLiteral.Create(value));
                break;

            case sqlParser.NUMERIC_LITERAL:
                Number64 number64 = CstToAstVisitor.GetNumber64ValueFromNode(terminalNode);
                sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlNumberLiteral.Create(number64));
                break;

            case sqlParser.K_TRUE:
                sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.Create(true));
                break;

            case sqlParser.K_FALSE:
                sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlBooleanLiteral.Create(false));
                break;

            case sqlParser.K_NULL:
                sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlNullLiteral.Create());
                break;

            case sqlParser.K_UNDEFINED:
                sqlLiteralScalarExpression = SqlLiteralScalarExpression.Create(SqlUndefinedLiteral.Create());
                break;

            default:
                throw new ArgumentOutOfRangeException($"Unknown symbol type: {terminalNode.Symbol.Type}");
            }

            return(sqlLiteralScalarExpression);
        }
Ejemplo n.º 23
0
        private object InterpretTerminalNodeImpl(IParseTree node)
        {
            TerminalNodeImpl term = (TerminalNodeImpl)node;

            if (term.Symbol.Type == JsonLTParser.STRING)
            {
                StringBuilder text = new StringBuilder(term.GetText());
                text.Remove(0, 1);
                text.Remove(text.Length - 1, 1);
                text.Replace("\\t", "\t");
                text.Replace("\\r", "\r");
                text.Replace("\\n", "\n");
                text.Replace("\\\\", "\\");
                text.Replace("\\", "");
                return(text.ToString());
            }
            if (term.Symbol.Type == JsonLTParser.NUMBER)
            {
                string text = term.GetText();
                if (text.Contains(".") || text.Contains("E") || text.Contains("e"))
                {
                    return(Convert.ToDouble(text));
                }
                else
                {
                    return(Convert.ToInt64(text));
                }
            }
            if (term.Symbol.Type == JsonLTParser.TRUE)
            {
                return(true);
            }
            if (term.Symbol.Type == JsonLTParser.FALSE)
            {
                return(false);
            }
            if (term.Symbol.Type == JsonLTParser.NULL)
            {
                return(null);
            }
            return(null);
        }
Ejemplo n.º 24
0
        public int GetTag(int index, Document doc)
        {
            ParsingResults pd        = ParsingResultsFactory.Create(doc);
            var            workspace = doc.Workspace;

            if (pd.ParseTree == null)
            {
                Compile(workspace);
            }

            Antlr4.Runtime.Tree.IParseTree pt = LanguageServer.Util.Find(index, doc);
            var gd = ParserDescriptionFactory.Create(doc);

            if (pt == null)
            {
                return(-1);
            }

            Antlr4.Runtime.Tree.IParseTree p = pt;
            TerminalNodeImpl q     = p as Antlr4.Runtime.Tree.TerminalNodeImpl;
            bool             found = pd.PopupList.TryGetValue(q, out int tag_type);

            if (found)
            {
                return(tag_type);
            }

            if (q.Symbol == null)
            {
                return(-1);
            }

            bool found2 = pd.Comments.TryGetValue(q.Symbol, out int tag2);

            if (found2)
            {
                return(tag2);
            }

            return(-1);
        }
Ejemplo n.º 25
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;
        }
        public override SqlObject VisitLiteral([NotNull] sqlParser.LiteralContext context)
        {
            TerminalNodeImpl terminalNode = (TerminalNodeImpl)context.children[0];

            SqlLiteral sqlLiteral;

            switch (terminalNode.Symbol.Type)
            {
            case sqlParser.STRING_LITERAL:
                string value = CstToAstVisitor.GetStringValueFromNode(terminalNode);
                sqlLiteral = SqlStringLiteral.Create(value);
                break;

            case sqlParser.NUMERIC_LITERAL:
                Number64 number64 = CstToAstVisitor.GetNumber64ValueFromNode(terminalNode);
                sqlLiteral = SqlNumberLiteral.Create(number64);
                break;

            case sqlParser.K_TRUE:
                sqlLiteral = SqlBooleanLiteral.Create(true);
                break;

            case sqlParser.K_FALSE:
                sqlLiteral = SqlBooleanLiteral.Create(false);
                break;

            case sqlParser.K_NULL:
                sqlLiteral = SqlNullLiteral.Create();
                break;

            case sqlParser.K_UNDEFINED:
                sqlLiteral = SqlUndefinedLiteral.Create();
                break;

            default:
                throw new ArgumentOutOfRangeException($"Unknown symbol type: {terminalNode.Symbol.Type}");
            }

            return(sqlLiteral);
        }
Ejemplo n.º 27
0
        public static int GetTag(int index, Document doc)
        {
            ParserDetails pd = ParserDetailsFactory.Create(doc);

            if (pd.ParseTree == null)
            {
                LanguageServer.Module.Compile();
            }

            Antlr4.Runtime.Tree.IParseTree pt = LanguageServer.Util.Find(index, doc);
            IGrammarDescription            gd = GrammarDescriptionFactory.Create(doc.FullPath);

            if (pt == null)
            {
                return(-1);
            }

            Antlr4.Runtime.Tree.IParseTree p = pt;
            TerminalNodeImpl q     = p as Antlr4.Runtime.Tree.TerminalNodeImpl;
            bool             found = pd.Tags.TryGetValue(q, out int tag_type);

            if (found)
            {
                return(tag_type);
            }

            if (q.Symbol == null)
            {
                return(-1);
            }

            bool found2 = pd.Comments.TryGetValue(q.Symbol, out int tag2);

            if (found2)
            {
                return(tag2);
            }

            return(-1);
        }
Ejemplo n.º 28
0
        public DocumentSymbol GetDocumentSymbol(int index, Document doc)
        {
            ParsingResults pd        = ParsingResultsFactory.Create(doc);
            var            workspace = doc.Workspace;

            if (pd.ParseTree == null)
            {
                Compile(workspace);
            }

            Antlr4.Runtime.Tree.IParseTree pt = LanguageServer.Util.Find(index, doc);
            var gd = ParserDescriptionFactory.Create(doc);

            if (pt == null)
            {
                return(default(DocumentSymbol));
            }

            Antlr4.Runtime.Tree.IParseTree p = pt;
            TerminalNodeImpl q     = p as Antlr4.Runtime.Tree.TerminalNodeImpl;
            bool             found = pd.PopupList.TryGetValue(q, out int tag_type);

            if (!found)
            {
                return(null);
            }

            if (q.Symbol == null)
            {
                return(null);
            }

            return(new DocumentSymbol()
            {
                name = q.Symbol.Text,
                range = new Workspaces.Range(q.Symbol.StartIndex, q.Symbol.StopIndex),
                kind = tag_type
            });
        }
Ejemplo n.º 29
0
 static void Decorate(IParseTree tree, Parser parser)
 {
     // DFS walk, add in nodes bottom up.
     if (tree is ParserRuleContext internal_node)
     {
         var old_children = internal_node.children.ToArray();
         for (int i = 0; i < old_children.Length; ++i)
         {
             var c = old_children[i];
             var as_terminal_node = c as TerminalNodeImpl;
             if (as_terminal_node != null)
             {
                 var            interval = as_terminal_node.SourceInterval;
                 var            stream   = parser.TokenStream as CommonTokenStream;
                 IList <IToken> inter    = null;
                 if (as_terminal_node.Symbol.TokenIndex >= 0)
                 {
                     inter = stream?.GetHiddenTokensToLeft(as_terminal_node.Symbol.TokenIndex);
                 }
                 if (inter != null)
                 {
                     foreach (var t in inter.Reverse())
                     {
                         var new_child = new TerminalNodeImpl(t);
                         internal_node.children.Insert(i, new_child);
                     }
                 }
             }
             Decorate(c, parser);
         }
     }
     else if (tree is TerminalNodeImpl terminal_node)
     {
     }
     else
     {
         throw new Exception();
     }
 }
Ejemplo n.º 30
0
        public static IEnumerable <IParseTree> DFS(IParseTree root)
        {
            Stack <IParseTree> toVisit          = new Stack <IParseTree>();
            Stack <IParseTree> visitedAncestors = new Stack <IParseTree>();

            toVisit.Push(root);
            while (toVisit.Count > 0)
            {
                IParseTree node = toVisit.Peek();
                if (node.ChildCount > 0)
                {
                    if (visitedAncestors.PeekOrDefault() != node)
                    {
                        visitedAncestors.Push(node);

                        if (node as TerminalNodeImpl != null)
                        {
                            TerminalNodeImpl leaf = node as TerminalNodeImpl;
                        }
                        else
                        {
                            ParserRuleContext internal_node = node as ParserRuleContext;
                            int child_count = internal_node.children.Count;
                            for (int i = node.ChildCount - 1; i >= 0; --i)
                            {
                                IParseTree o = internal_node.children[i];
                                Type       t = o.GetType();
                                toVisit.Push(o);
                            }
                            continue;
                        }
                    }
                    visitedAncestors.Pop();
                }
                yield return(node);

                toVisit.Pop();
            }
        }