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); } }
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); }