private ASTNode parseCompoundExpressionNull(InfixOperator infixOperator, ASTNode rhs) { if (infixOperator.isOperator(";")) { if (fToken == TT_EOF || fToken == TT_ARGUMENTS_CLOSE || fToken == TT_LIST_CLOSE || fToken == TT_PRECEDENCE_CLOSE || fToken == TT_COMMA) { return infixOperator.createFunction(fFactory, rhs, fFactory.createSymbol("Null")); } if (fPackageMode && fRecursionDepth < 1) { return infixOperator.createFunction(fFactory, rhs, fFactory.createSymbol("Null")); } } return null; }
@Override public ASTNode createFunction(final INodeParserFactory factory, final ASTNode lhs, final ASTNode rhs) { return factory.createFunction(factory.createSymbol("Plus"), lhs, factory.createFunction(factory.createSymbol("Times"), factory.createInteger(-1), rhs)); } }
public ASTNode createFunction(final INodeParserFactory factory, final ASTNode argument) { return factory.createFunction(factory.createSymbol(getFunctionName()), argument); } }
public ASTNode createFunction(final INodeParserFactory factory, final ASTNode argument) { return factory.createFunction(factory.createSymbol(getFunctionName()), argument); } }
@Override public ASTNode createFunction(final INodeParserFactory factory, final ASTNode argument) { return factory.createFunction(factory.createSymbol("Times"), factory.createInteger(-1), argument); } }
@Override public ASTNode createFunction(final INodeParserFactory factory, final ASTNode lhs, final ASTNode rhs) { if (fOperatorString.equals("@")) { FunctionNode fn = factory.createAST(lhs); fn.add(rhs); return fn; } FunctionNode fn = factory.createFunction(factory.createSymbol("Apply"), lhs, rhs); if (fOperatorString.equals("@@")) { return fn; } // case "@@@" fn.add(factory.createFunction(factory.createSymbol("List"), factory.createInteger(1))); return fn; } }
@Override public ASTNode createFunction(final INodeParserFactory factory, final ASTNode lhs, final ASTNode rhs) { if (rhs instanceof FunctionNode) { FunctionNode r = (FunctionNode) rhs; if (r.size() == 3) { if (r.get(0).equals(factory.createSymbol("Set"))) { return factory.createFunction(factory.createSymbol("TagSet"), lhs, r.get(1), r.get(2)); } else if (r.get(0).equals(factory.createSymbol("SetDelayed"))) { return factory.createFunction(factory.createSymbol("TagSetDelayed"), lhs, r.get(1), r.get(2)); } } } return factory.createFunction(factory.createSymbol("TagSet"), lhs, rhs); } }
@Override public ASTNode createFunction(final INodeParserFactory factory, final ASTNode lhs, final ASTNode rhs) { if (rhs instanceof IntegerNode) { if (lhs instanceof IntegerNode) { return new FractionNode((IntegerNode) lhs, (IntegerNode) rhs); } return factory.createFunction(factory.createSymbol("Times"), new FractionNode(IntegerNode.C1, (IntegerNode) rhs), lhs); } if (lhs.equals(IntegerNode.C1)) { return factory.createFunction(factory.createSymbol("Power"), rhs, factory.createInteger(-1)); } return factory.createFunction(factory.createSymbol("Times"), lhs, factory.createFunction(factory.createSymbol("Power"), rhs, factory.createInteger(-1))); } }
public ASTNode createFunction(final INodeParserFactory factory, final ASTNode lhs, final ASTNode rhs) { if (fOperatorString.equals("//")) { // lhs // rhs ==> rhs[lhs] FunctionNode function =factory.createAST(rhs); function.add(lhs); return function; } return factory.createFunction(factory.createSymbol(getFunctionName()), lhs, rhs); } }
/** * Read the current identifier from the expression factories table * * @return * @see */ private SymbolNode getSymbol() throws SyntaxError { String[] identifierContext = getIdentifier(); if (!fFactory.isValidIdentifier(identifierContext[0])) { throwSyntaxError("Invalid identifier: " + identifierContext[0] + " detected."); } final SymbolNode symbol = fFactory.createSymbol(identifierContext[0], identifierContext[1]); getNextToken(); return symbol; }
private ASTNode parsePrimary(final int min_precedence) { if (fToken == TT_OPERATOR) { if (";;".equals(fOperatorString)) { FunctionNode function = fFactory.createFunction(fFactory.createSymbol(IConstantOperators.Span)); function.add(fFactory.createInteger(1)); getNextToken(); if (fToken == TT_COMMA || fToken == TT_ARGUMENTS_CLOSE || fToken == TT_PRECEDENCE_CLOSE) { function.add(fFactory.createSymbol(IConstantOperators.All)); return function; } function.add(parsePrimary(0)); if (fToken == TT_OPERATOR && ";;".equals(fOperatorString)) { function.add(fFactory.createSymbol(IConstantOperators.All)); getNextToken(); } return function; } if (".".equals(fOperatorString)) { fCurrentChar = '.'; return getNumber(false); } final PrefixOperator prefixOperator = determinePrefixOperator(); if (prefixOperator != null) { return parsePrefixOperator(prefixOperator); } throwSyntaxError("Operator: " + fOperatorString + " is no prefix operator."); } return getPart(min_precedence); }
/** * Get a list {...} * */ private ASTNode getList() throws SyntaxError { final FunctionNode function = fFactory.createFunction(fFactory.createSymbol(IConstantOperators.List)); fRecursionDepth++; getNextToken(); if (fToken == TT_LIST_CLOSE) { fRecursionDepth--; getNextToken(); return function; } getArguments(function); fRecursionDepth--; if (fToken == TT_LIST_CLOSE) { getNextToken(); return function; } throwSyntaxError("'}' expected."); return null; }
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; }
do { if (function == null) { function = fFactory.createFunction(fFactory.createSymbol(IConstantOperators.Part), temp); } else { function = fFactory.createFunction(fFactory.createSymbol(IConstantOperators.Part), function);
if (Config.DOMINANT_IMPLICIT_TIMES || oper.getPrecedence() >= min_precedence) { rhs = parseLookaheadOperator(oper.getPrecedence()); lhs = fFactory.createFunction(fFactory.createSymbol(oper.getFunctionName()), lhs, rhs); continue;
if (infixOperator.isOperator(";")) { if (fPackageMode && fRecursionDepth < 1) { return infixOperator.createFunction(fFactory, rhs, fFactory.createSymbol("Null"));
final FunctionNode function = fFactory.createAST(fFactory.createSymbol("Optional")); function.add(fFactory.createPattern(symbol, null, false)); function.add(defaultValue); final FunctionNode function = fFactory.createAST(fFactory.createSymbol("Optional")); function.add(fFactory.createPattern(null, null, false)); function.add(defaultValue); } else if (fToken == TT_PERCENT) { final FunctionNode out = fFactory.createFunction(fFactory.createSymbol(IConstantOperators.Out)); final FunctionNode slot = fFactory.createFunction(fFactory.createSymbol(IConstantOperators.Slot)); if (fToken == TT_DIGIT) { slot.add(fFactory.createInteger(getInteger())); .createFunction(fFactory.createSymbol(IConstantOperators.SlotSequence)); if (fToken == TT_DIGIT) { slotSequencce.add(getNumber(false));