CustomTree LogicalExpression()
        {
            CustomTree node = new CustomTree("logic_expression");

            node.AddChild(Expression()); // Expression
            node.AddChild(new CustomTree(ExpectLogicalOp().Lexeme));
            node.AddChild(Expression());
            return(node);
        }
        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);
        }
        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);
        }
        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);
        }
        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);
        }
        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);
        }
        private CustomTree OutputStatement()
        {
            CustomTree node = new CustomTree("output");

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

            return(node);
        }
Exemple #8
0
        CustomTree _Program()
        {
            CustomTree node = new CustomTree("test");

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

            return(node);
        }