예제 #1
0
 @SuppressWarnings("unchecked")
 private void expression() {
   term();
   while (token == Lexer.OR) {
     NonTerminal or = NodeFactory.createNonTerminal(token);
     or.setLeft(root);
     term();
     or.setRight(root);
     root = or;
   }
 }
예제 #2
0
 @SuppressWarnings("unchecked")
 private void term() {
   factor();
   while (token == Lexer.AND) {
     NonTerminal and = NodeFactory.createNonTerminal(token);
     and.setLeft(root);
     factor();
     and.setRight(root);
     root = and;
   }
 }
예제 #3
0
 private void value() {
   if (token == Lexer.VARIABLE || token == Lexer.NUMBER) {
     root = NodeFactory.createTerminal(token, lexer.getValue());
     if (token == Lexer.VARIABLE && allowedIdentifiers != null) {
       if (!allowedIdentifiers.contains(root.getSymbol()))
         throw new MalformedExpressionException(
             String.format("Unknown identifier '%s'", root.getSymbol()));
     }
     token = lexer.nextToken();
   } else {
     throw new MalformedExpressionException(
         String.format("Value instead of <%s> expected.", token));
   }
 }
예제 #4
0
 @SuppressWarnings("unchecked")
 private void condition() {
   value();
   if (token == Lexer.GREATER
       || token == Lexer.GREATEROREQUAL
       || token == Lexer.LESS
       || token == Lexer.LESSOREQUAL
       || token == Lexer.EQUAL
       || token == Lexer.NOTEQUAL) {
     NonTerminal condition = NodeFactory.createNonTerminal(token);
     condition.setLeft(root);
     token = lexer.nextToken();
     value();
     condition.setRight(root);
     root = condition;
   } else {
     throw new MalformedExpressionException(
         String.format("Conditional operator instead of <%s> expected.", token));
   }
 }