Expression AndExpression() { Expression ret = EqualityExpression(); while (Current.TokenKind == TokenKind.OpAnd) { Consume(); // Or Expression rhs = EqualityExpression(); ret = new BinaryExpression(ret.Line, ret.Col, ret, TokenKind.OpAnd, rhs); } return ret; }
private Expression EqualityExpression() { Expression ret = RelationalExpression(); while (Current.TokenKind == TokenKind.OpIs || Current.TokenKind == TokenKind.OpIsNot) { Token tok = Consume(); // consume operator Expression rhs = RelationalExpression(); ret = new BinaryExpression(ret.Line, ret.Col, ret, tok.TokenKind, rhs); } return ret; }
private Expression RelationalExpression() { Expression ret = PrimaryExpression(); while (Current.TokenKind == TokenKind.OpLt || Current.TokenKind == TokenKind.OpLte || Current.TokenKind == TokenKind.OpGt || Current.TokenKind == TokenKind.OpGte) { Token tok = Consume(); // consume operator Expression rhs = PrimaryExpression(); ret = new BinaryExpression(ret.Line, ret.Col, ret, tok.TokenKind, rhs); } return ret; }
Expression OrExpression() { Expression ret = AndExpression(); while (Current.TokenKind == TokenKind.OpOr) { Consume(); // Or Expression rhs = AndExpression(); ret = new BinaryExpression(ret.Line, ret.Col, ret, TokenKind.OpOr, rhs); } return ret; }