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); }
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); }
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); }