@SuppressWarnings("unchecked") private void expression() { term(); while (token == Lexer.OR) { NonTerminal or = NodeFactory.createNonTerminal(token); or.setLeft(root); term(); or.setRight(root); root = or; } }
@SuppressWarnings("unchecked") private void term() { factor(); while (token == Lexer.AND) { NonTerminal and = NodeFactory.createNonTerminal(token); and.setLeft(root); factor(); and.setRight(root); root = and; } }
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)); } }
@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)); } }