示例#1
0
        private CustomTree AssignmentStatement()
        {
            CustomTree node = AssignmentExpression();

            ExpectedToken((uint)TokenTable.Code.Semicolon); // ';'
            return(node);
        }
示例#2
0
        public void AddChild(CustomTree node)
        {
            if (children == null)
            {
                children = new List <CustomTree>();
            }

            children.Add(node);
        }
示例#3
0
        CustomTree LogicalExpression()
        {
            CustomTree node = new CustomTree("logic_expression");

            node.AddChild(Expression()); // Expression
            node.AddChild(new CustomTree(ExpectLogicalOp().Lexeme));
            node.AddChild(Expression());
            return(node);
        }
示例#4
0
        private CustomTree OutputStatement()
        {
            CustomTree node = new CustomTree("output");

            ExpectedToken((uint)TokenTable.Code.Print);     // 'print'
            node.AddChild(Expression());
            ExpectedToken((uint)TokenTable.Code.Semicolon); // ';'

            return(node);
        }
示例#5
0
        CustomTree _Program()
        {
            CustomTree node = new CustomTree("test");

            while (tokenListNode != null)
            {
                node.AddChild(Statement());
            }

            return(node);
        }
示例#6
0
        CustomTree AssignmentExpression()
        {
            CustomTree node  = new CustomTree("assignment");
            var        token = ExpectedToken((uint)TokenTable.Code.Id); // identifier

            node.AddChild(new CustomTree("identifier", token.ForeignId));
            ExpectedToken((uint)TokenTable.Code.Assign); // '='
            node.AddChild(Expression(token.Lexeme));

            return(node);
        }
示例#7
0
        private CustomTree ConditionStatement()
        {
            CustomTree node = new CustomTree("if");

            ExpectedToken((uint)TokenTable.Code.If);           // 'if'
            ExpectedToken((uint)TokenTable.Code.OpenBrackets); // '('
            node.AddChild(LogicalExpression());
            TransitToNextToken();
            ExpectedToken((uint)TokenTable.Code.CloseBrackets); // ')'
            node.AddChild(Statement());

            return(node);
        }
示例#8
0
        private CustomTree LoopStatement()
        {
            CustomTree node = new CustomTree("for");

            ExpectedToken((uint)TokenTable.Code.For);           // 'for'
            ExpectedToken((uint)TokenTable.Code.OpenBrackets);  // '('
            node.AddChild(AssignmentExpression());
            ExpectedToken((uint)TokenTable.Code.Semicolon);     // ';'
            node.AddChild(LogicalExpression());
            ExpectedToken((uint)TokenTable.Code.Semicolon);     // ';'
            ExpectedToken((uint)TokenTable.Code.CloseBrackets); // ')'
            node.AddChild(Statement());
            return(node);
        }
示例#9
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);
        }
示例#10
0
        private CustomTree DeclarationStatement()
        {
            CustomTree node = new CustomTree("declaration");

            //"int" | "float"
            var token = ExpectedOneOfTokens("TypeSpecifier", (uint)TokenTable.Code.Int, 100);

            node.AddChild(new CustomTree(TokenTable.GetLexemeName(token.Code)));
            // identifier
            token = ExpectedToken((uint)TokenTable.Code.Id);
            node.AddChild(new CustomTree("identifier", token.ForeignId));

            ExpectedToken((uint)TokenTable.Code.Semicolon); // ';'

            return(node);
        }
示例#11
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);
            }
        }