Exemple #1
0
        private Expression ParseTerm()
        {
            Token      firstTermToken = CurrentToken;
            Expression left           = ParseFactor();

            while (Accept(TokenType.OpMultiply, TokenType.OpDivide, TokenType.OpModulus, TokenType.OpAnd))
            {
                BinaryExpr expr = new BinaryExpr(firstTermToken);
                expr.SetOperatorFromToken(AcceptedToken);
                expr.Left  = left;
                expr.Right = ParseFactor();
                left       = expr;
            }
            return(left);
        }
Exemple #2
0
        private Expression ParseExpression()
        {
            Token      firstTermToken = CurrentToken;
            Expression left           = ParseSimpleExpression();

            if (Accept(TokenType.OpLess, TokenType.OpLessOrEquals, TokenType.OpMore,
                       TokenType.OpMoreOrEquals, TokenType.OpEquals, TokenType.OpNotEquals))
            {
                BinaryExpr expr = new BinaryExpr(firstTermToken);
                expr.Left = left;
                expr.SetOperatorFromToken(AcceptedToken);
                expr.Right = ParseSimpleExpression();
                return(expr);
            }
            return(left);
        }
Exemple #3
0
        private Expression ParseSimpleExpression()
        {
            Token    firstTermToken = CurrentToken;
            ExprSign termSign       = ExprSign.Plus;

            if (Accept(TokenType.Minus, TokenType.Plus))
            {
                termSign = AcceptedToken.Type == TokenType.Minus ? ExprSign.Minus : ExprSign.Plus;
            }
            Expression left = ParseTerm();

            left.Sign = termSign;
            while (Accept(TokenType.Plus, TokenType.Minus, TokenType.OpOr))
            {
                BinaryExpr expr = new BinaryExpr(firstTermToken);
                expr.SetOperatorFromToken(AcceptedToken);
                expr.Left  = left;
                expr.Right = ParseTerm();
                left       = expr;
            }
            return(left);
        }