// primaryExpression : startNode (node)? -> ^(EXPRESSION startNode (node)?); private SpelNodeImpl eatPrimaryExpression() { List<SpelNodeImpl> nodes = new ArrayList<SpelNodeImpl>(); SpelNodeImpl start = eatStartNode(); // always a start node nodes.add(start); while (maybeEatNode()) { nodes.add(pop()); } if (nodes.size() == 1) { return nodes.get(0); } else { return new CompoundExpression( toPos(start.getStartPosition(), nodes.get(nodes.size() - 1).getEndPosition()), nodes.toArray(new SpelNodeImpl[nodes.size()])); } }