Exemplo n.º 1
0
        static void PrintSyntaxTree(TokenTable tokensTable, CustomTree node, int level = 0)
        {
            Console.Write($"{new string('\t', level)} {node.Name}");
            if (node.Id != 0)
            {
                Console.Write(node.Name == "identifier"
                    ? $"\"{tokensTable.IdentifiersTable[node.Id]}\""
                    : $"\"{tokensTable.LiteralsTable[node.Id]}\"");
                Console.Write($" ({node.Id})");
            }

            Console.WriteLine();

            if (node.GetChildren() == null)
            {
                return;
            }

            foreach (var child in node.GetChildren())
            {
                PrintSyntaxTree(tokensTable, child, level + 1);
            }
        }
Exemplo n.º 2
0
        CustomTree Expression(string idName = null, POLIZBuilder builder = null)
        {
            CustomTree node = new CustomTree("expression");

            builder = new POLIZBuilder();

            while (GetTokenCode() != (uint)TokenTable.Code.Semicolon && !TokenTable.LogicOpCodes.Contains(GetTokenCode()))
            {
                builder.Append(GetCurrent());
                TransitToNextToken();
            }
            var tokens = builder.End();

            if (idName != null)
            {
                CustomTree st = new CustomTree(idName);
                st.AddChild(new CustomTree(idName));
                foreach (var token in tokens)
                {
                    st.AddChild(token.Code == (uint)TokenTable.Code.Id
                        ? new CustomTree("identifier", token.ForeignId)
                        : new CustomTree(token.Lexeme));

                    node.AddChild(token.Code == (uint)TokenTable.Code.Id
                        ? new CustomTree("identifier", token.ForeignId)
                        : new CustomTree(token.Lexeme));
                }
                st.AddChild(new CustomTree("="));

                Console.Write("POLIZ: ");

                foreach (var child in st.GetChildren())
                {
                    Console.Write(child.Name + " ");
                }

                Console.WriteLine();
            }
            else
            {
                foreach (var token in tokens)
                {
                    node.AddChild(token.Code == (uint)TokenTable.Code.Id
                        ? new CustomTree("identifier", token.ForeignId)
                        : new CustomTree(token.Lexeme));
                }
            }
            return(node);
        }