Example #1
0
 private SyntaxTreeNode AddOp()
 {
     SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken };
     if (curToken.TokenType == TokenType.Plus)
         Match(TokenType.Plus);
     else if (curToken.TokenType == TokenType.Minus)
         Match(TokenType.Minus);
     return node;
 }
Example #2
0
        private SyntaxTreeNode AssignStatement()
        {
            SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode();
            if (curToken.TokenType == TokenType.Identifier)
            {
                node.Left = new SyntaxTreeBinaryNode() { Token = curToken };
                Match(TokenType.Identifier);
            }

            if (curToken.TokenType == TokenType.Assignment)
            {
                node.Token = curToken;
                Match(TokenType.Assignment);
            }

            node.Right = Expression();

            return node;
        }
Example #3
0
 private SyntaxTreeNode ComparisonOp()
 {
     SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken };
     if (curToken.TokenType == TokenType.Greater)
         Match(TokenType.Greater);
     else if (curToken.TokenType == TokenType.LessThan)
         Match(TokenType.LessThan);
     else if (curToken.TokenType == TokenType.LessThanOrEqual)
         Match(TokenType.LessThanOrEqual);
     else if (curToken.TokenType == TokenType.GreaterThanOrEqual)
         Match(TokenType.GreaterThanOrEqual);
     else if (curToken.TokenType == TokenType.Equal)
         Match(TokenType.Equal);
     return node;
 }
Example #4
0
        private SyntaxTreeNode Term()
        {
            SyntaxTreeNode node = Factor();

            while (curToken.TokenType == TokenType.Multiply || curToken.TokenType == TokenType.Division)
            {
                SyntaxTreeBinaryNode temp = new SyntaxTreeBinaryNode() { Token = curToken };
                temp.Left = node;
                Match(curToken.TokenType);
                temp.Right = Factor();
                node = temp;
            }
            return node;
        }
Example #5
0
        private SyntaxTreeNode WriteStatement()
        {
            SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken };
            Match(TokenType.Write);

            node.Left = Expression();

            return node;
        }
Example #6
0
        private SyntaxTreeNode RepeatStatement()
        {
            SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken };
            Match(TokenType.Repeat);

            SyntaxTreeNode statements = StatementSequence();
            Match(TokenType.Until);

            SyntaxTreeNode condition = Expression();

            node.Left = condition;
            node.Right = statements;

            return node;
        }
Example #7
0
        private SyntaxTreeNode SimpleExpression()
        {
            SyntaxTreeNode node = Term();

            while (curToken.TokenType == TokenType.Plus || curToken.TokenType == TokenType.Minus)
            {
                SyntaxTreeBinaryNode temp = new SyntaxTreeBinaryNode() { Token = curToken };
                temp.Left = node;
                Match(curToken.TokenType);
                temp.Right = Term();
                node = temp;
            }
            return node;
        }
Example #8
0
        private SyntaxTreeNode ReadStatement()
        {
            SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken };
            Match(TokenType.Read);

            if (curToken.TokenType == TokenType.Identifier)
            {
                node.Left = new SyntaxTreeBinaryNode() { Token = curToken };
                Match(TokenType.Identifier);
            }

            return node;
        }
Example #9
0
 private SyntaxTreeNode MulOp()
 {
     SyntaxTreeBinaryNode node = new SyntaxTreeBinaryNode() { Token = curToken };
     if (curToken.TokenType == TokenType.Multiply)
         Match(TokenType.Multiply);
     else if (curToken.TokenType == TokenType.Division)
         Match(TokenType.Division);
     return node;
 }
Example #10
0
        private SyntaxTreeNode IfStatement()
        {
            SyntaxTreeBinaryNode ifNode = new SyntaxTreeBinaryNode() { Token = curToken };
            Match(TokenType.If);

            ifNode.Left = Expression();
            Match(TokenType.Then);

            SyntaxTreeNode thenPart = StatementSequence();
            SyntaxTreeBinaryNode ifParts = new SyntaxTreeBinaryNode() { Left = thenPart };

            if (curToken.TokenType == TokenType.Else)
            {
                Match(TokenType.Else);
                ifParts.Right = StatementSequence();
            }

            ifNode.Right = ifParts;
            Match(TokenType.End);

            return ifNode;
        }
Example #11
0
 private SyntaxTreeNode Factor()
 {
     SyntaxTreeNode node = null;
     if (curToken.TokenType == TokenType.LeftParenthesis)
     {
         Match(TokenType.LeftParenthesis);
         node = Expression();
         Match(TokenType.RightParenthesis);
     }
     else if (curToken.TokenType == TokenType.Number)
     {
         node = new SyntaxTreeBinaryNode() { Token = curToken };
         Match(TokenType.Number);
     }
     else
     {
         node = new SyntaxTreeBinaryNode() { Token = curToken };
         Match(TokenType.Identifier);
     }
     return node;
 }
Example #12
0
        private SyntaxTreeNode Expression()
        {
            SyntaxTreeNode node = SimpleExpression();
            if (IsComparison(curToken.TokenType))
            {
                SyntaxTreeBinaryNode temp = new SyntaxTreeBinaryNode() { Token = curToken };
                Match(curToken.TokenType);
                temp.Left = node;
                temp.Right = SimpleExpression();
                node = temp;
            }

            return node;
        }