Example #1
0
 /** equality ::= relational EQ relational equality ::= relational NEQ relational */
 private Value equality() {
   Value res = relational();
   while (token.getType() == TokenType.EQ || token.getType() == TokenType.NEQ) {
     if (token.getType() == TokenType.EQ) {
       res.setBooleanValue(res.getValue() == relational().getValue());
     } else if (token.getType() == TokenType.NEQ) {
       res.setBooleanValue(res.getValue() != relational().getValue());
     }
   }
   return res;
 }
Example #2
0
 /** logicalOr ::= logicalAnd OR logicalAnd */
 private Value logicalOr() {
   Value res = logicalAnd();
   while (token.getType() == TokenType.OR) {
     Value operand = logicalAnd();
     res.setBooleanValue(res.getBooleanValue() || operand.getBooleanValue());
   }
   return res;
 }
Example #3
0
 /** logicalAnd ::= equality AND equality */
 private Value logicalAnd() {
   Value res = equality();
   while (token.getType() == TokenType.AND) {
     Value operand = equality();
     res.setBooleanValue(res.getBooleanValue() && operand.getBooleanValue());
   }
   return res;
 }
Example #4
0
 /**
  * relational ::= additive LT additive relational ::= additive GT additive relational ::= additive
  * LTE additive relational ::= additive GTE additive
  */
 private Value relational() {
   Value res = additive();
   while (token.getType() == TokenType.LT
       || token.getType() == TokenType.GT
       || token.getType() == TokenType.LTE
       || token.getType() == TokenType.GTE) {
     if (token.getType() == TokenType.LT) {
       res.setBooleanValue(res.getValue() < additive().getValue());
     } else if (token.getType() == TokenType.GT) {
       res.setBooleanValue(res.getValue() > additive().getValue());
     } else if (token.getType() == TokenType.LTE) {
       res.setBooleanValue(res.getValue() <= additive().getValue());
     } else if (token.getType() == TokenType.GTE) {
       res.setBooleanValue(res.getValue() >= additive().getValue());
     }
   }
   return res;
 }
Example #5
0
 /**
  * unary ::= NUMBER unary ::= OPEN logicalOr CLOSE unary ::= VARIABLE unary ::= NOT unary unary
  * ::= SUB unary unary ::= ADD unary
  */
 private Value unary() {
   final Value res;
   nextToken();
   if (token.getType() == TokenType.SUB) {
     res = unary();
     return res.setValue(-res.getValue());
   } else if (token.getType() == TokenType.ADD) {
     return unary();
   } else if (token.getType() == TokenType.NOT) {
     res = unary();
     return res.setBooleanValue(!res.getBooleanValue());
   } else if (token.getType() == TokenType.OPEN) {
     res = logicalOr();
     if (token.getType() != TokenType.CLOSE) {
       throw expected(TokenType.CLOSE);
     }
   } else if (token.getType() == TokenType.NUMBER) {
     res = token.getValue();
   } else if (token.getType() == TokenType.VARIABLE) {
     // resolve variable
     res = variables.get(token.getStr());
     if (res == null) {
       throw new IllegalStateException("Unexpected variable name");
     }
   } else {
     throw expected(
         TokenType.SUB,
         TokenType.ADD,
         TokenType.NOT,
         TokenType.OPEN,
         TokenType.NUMBER,
         TokenType.VARIABLE);
   }
   nextToken();
   return res;
 }