private final ASTNode parsePrefixOperator(final PrefixOperator prefixOperator) { getNextToken(); final ASTNode temp = parseLookaheadOperator(prefixOperator.getPrecedence()); if ("PreMinus".equals(prefixOperator.getFunctionName()) && temp instanceof NumberNode) { // special cases for negative numbers ((NumberNode) temp).toggleSign(); return temp; } return prefixOperator.createFunction(fFactory, temp); }
private final ASTNode parseInfixOperator(ASTNode lhs, InfixOperator infixOperator) { ASTNode rhs; rhs = parseLookaheadOperator(infixOperator.getPrecedence()); lhs = infixOperator.createFunction(fFactory, lhs, rhs); String infixOperatorString = infixOperator.getOperatorString(); while (fToken == TT_OPERATOR && infixOperator.getGrouping() == InfixOperator.NONE && infixOperatorString.equals(fOperatorString)) { getNextToken(); if (";".equals(infixOperatorString)) { if (fToken == TT_EOF || fToken == TT_ARGUMENTS_CLOSE || fToken == TT_LIST_CLOSE || fToken == TT_PRECEDENCE_CLOSE || fToken == TT_COMMA) { ((FunctionNode) lhs).add(fFactory.createSymbol("Null")); break; } } while (fToken == TT_NEWLINE) { getNextToken(); } rhs = parseLookaheadOperator(infixOperator.getPrecedence()); ((FunctionNode) lhs).add(rhs); } return lhs; }
private ASTNode parsePrimary() { if (fToken == TT_OPERATOR) { if (fOperatorString.equals(".")) { fCurrentChar = '.'; return getNumber(false); } final PrefixOperator prefixOperator = determinePrefixOperator(); if (prefixOperator != null) { getNextToken(); final ASTNode temp = parseLookaheadOperator(prefixOperator.getPrecedence()); if (prefixOperator.getFunctionName().equals("PreMinus")) { // special cases for negative numbers if (temp instanceof NumberNode) { ((NumberNode) temp).toggleSign(); return temp; } } return prefixOperator.createFunction(fFactory, temp); } throwSyntaxError("Operator: " + fOperatorString + " is no prefix operator."); } return getPart(); }
/** * Parses the primary. * * @return the AST node */ private ASTNode parsePrimary() { if ( fToken == TT_OPERATOR ) { final PrefixOperator prefixOperator = determinePrefixOperator(); if ( prefixOperator != null ) { getNextToken(); final ASTNode temp = parseLookaheadOperator( prefixOperator.getPrecedence() ); if ( prefixOperator.getFunctionName().equals( "PreMinus" ) ) { // special cases for negative numbers if ( temp instanceof NumberNode ) { ((NumberNode) temp).toggleSign(); return temp; } } return prefixOperator.createFunction( fFactory, temp ); } throwSyntaxError( "Operator: " + fOperatorString + " is no prefix operator." ); } return getPart(); }
rhs = parseLookaheadOperator( oper.getPrecedence() ); lhs = fFactory.createFunction( fFactory.createSymbol( oper.getFunctionName() ), lhs, rhs ); lhs = parseArguments( lhs ); if ( infixOperator.getPrecedence() >= min_precedence ) { getNextToken(); rhs = parseLookaheadOperator( infixOperator.getPrecedence() ); lhs = infixOperator.createFunction( fFactory, lhs, rhs ); lhs = parseArguments( lhs );
rhs = parseLookaheadOperator(oper.getPrecedence()); lhs = fFactory.createFunction(fFactory.createSymbol(oper.getFunctionName()), lhs, rhs); lhs = parseArguments(lhs); if (infixOperator.getPrecedence() >= min_precedence) { getNextToken(); rhs = parseLookaheadOperator(infixOperator.getPrecedence()); lhs = infixOperator.createFunction(fFactory, lhs, rhs); lhs = parseArguments(lhs);
rhs = parseLookaheadOperator(oper.getPrecedence()); lhs = fFactory.createFunction(fFactory.createSymbol(oper.getFunctionName()), lhs, rhs); continue;