Exemplo n.º 1
0
        private IExpression ParseExprAdd()
        {
            var result = ParseExprMul();

            while (true)
            {
                if (Accept(TokenType.OpAdd) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.Add, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpAssAdd) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.AssAdd, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpSub) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.Sub, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpAssSub) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.AssSub, result, ParseExprMul());
                }
                else
                {
                    break;
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        private IExpression ParseExprMul()
        {
            var result = ParseExprPrimary();

            /*while (Accept(TokenType.OpMul) != null || Accept(TokenType.OpDiv) != null || Accept(TokenType.OpMod) != null)
             *  result = new ExprBinaryArithmetic(ExprBinKind.Mul, result, ParseExprPrimary());*/
            while (true)
            {
                if (Accept(TokenType.OpMul) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.Mul, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpDiv) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.Div, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpAssMul) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.AssMul, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpAssDiv) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.AssDiv, result, ParseExprMul());
                }
                else if (Accept(TokenType.OpMod) != null)
                {
                    result = new ExprBinaryArithmetic(ExprBinKind.Mod, result, ParseExprMul());
                }
                else
                {
                    break;
                }
            }

            return(result);
        }