Exemplo n.º 1
0
        public static StringBuilder OutputTree(this IParseTree tree, CommonTokenStream stream, Lexer lexer)
        {
            var sb = new StringBuilder();

            tree.ParenthesizedAST(sb, stream, lexer);
            return(sb);
        }
Exemplo n.º 2
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;
            }
        }
Exemplo n.º 3
0
        public static StringBuilder OutputTree(this IParseTree tree, CommonTokenStream stream)
        {
            StringBuilder sb = new StringBuilder();

            changed    = 0;
            first_time = true;
            tree.ParenthesizedAST(sb, stream);
            return(sb);
        }