/** {@inheritDoc} */ @Override protected LinkedList<PathData> expandArguments(LinkedList<String> argList) throws IOException { Deque<String> args = new LinkedList<String>(argList); LinkedList<PathData> pathArgs = parsePathData(args); if(pathArgs.size() == 0) { throw new IOException("No path specified"); } Expression expression = parseExpression(args); if(!expression.isAction()) { Expression and = getExpression(And.class); Deque<Expression> children = new LinkedList<Expression>(); children.add(getExpression(Print.class)); children.add(expression); and.addChildren(children); expression = and; } setRootExpression(expression); return pathArgs; }
Deque<Expression> primaries = new LinkedList<Expression>(); Deque<Expression> operators = new LinkedList<Expression>(); Expression prevExpr = getExpression(And.class); while(!args.isEmpty()) { String arg = args.pop(); Expression expr = getExpression(arg); expr.addArguments(args); if(expr.isOperator()) { Expression and = getExpression(And.class); while(!operators.isEmpty()) { if(operators.peek().getPrecedence() >= and.getPrecedence()) { return primaries.isEmpty() ? getExpression(Print.class) : primaries.pop();