private FormulaNode relational() { FormulaNode left = term(); while(lexer.hasNext() && lexer.peek().isRelationalOperator()) { FormulaFunction op = function(); FormulaNode right = term(); left = binaryInfixCall(op, left, right); } return left; }
private FormulaNode conjunction() { FormulaNode left = equality(); while(lexer.hasNext() && lexer.peek().isAndOperator()) { FormulaFunction op = function(); FormulaNode right = equality(); left = binaryInfixCall(op, left, right); } return left; }
private FormulaNode disjunction() { FormulaNode left = conjunction(); while(lexer.hasNext() && lexer.peek().isOrOperator()) { FormulaFunction op = function(); FormulaNode right = conjunction(); left = binaryInfixCall(op, left, right); } return left; }
public FormulaNode factor() { // <factor> ::= <unary> | <factor> * <unary> | <factor> / <unary> FormulaNode left = unary(); while(lexer.hasNext() && lexer.peek().isMultiplicativeOperator()) { FormulaFunction function = function(); FormulaNode right = unary(); left = binaryInfixCall(function, left, right); } return left; }
private FormulaNode equality() { FormulaNode left = relational(); while(lexer.hasNext() && lexer.peek().isEqualityOperator()) { FormulaFunction op = function(); FormulaNode right = relational(); left = binaryInfixCall(op, left, right); } return left; }
private FormulaNode term() { // <term> ::= <factor> | <term> + <factor> | <term> - <factor> FormulaNode left = factor(); while (lexer.hasNext() && lexer.peek().isAdditiveOperator()) { FormulaFunction op = function(); FormulaNode right = factor(); left = binaryInfixCall(op, left, right); } return left; }