Ejemplo n.º 1
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;
 }
Ejemplo n.º 2
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;
 }
Ejemplo n.º 3
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;
 }