private void processEval(final KeywordGroup keywordGroup) {
            final List<AbstractToken> children = keywordGroup.getChildren();

            // Check we have a variable name.
            if (children.isEmpty()) {
                throw new TokenException(keywordGroup, "Expected variable name following eval");
            }
            final AbstractToken variableToken = children.getFirst();
            if (!TokenType.isString(variableToken)) {
                throw new TokenException(variableToken, "Expected variable name");
            }
            final String variable = variableToken.getUnescapedText();

            // Check we have equals operator.
            if (children.size() == 1) {
                throw new TokenException(variableToken, "Expected equals");
            }
            final AbstractToken equalsToken = children.get(1);
            if (!TokenType.EQUALS.equals(equalsToken.getTokenType())) {
                throw new TokenException(equalsToken, "Expected equals");
            }

            // Check we have a function expression.
            if (children.size() <= 2) {
                throw new TokenException(equalsToken, "Expected eval expression");
            }

            // Parse the expression to check it is valid.
            final List<AbstractToken> expressionTokens = children.subList(2, children.size());
            final ExpressionParser expressionParser = new ExpressionParser(new ParamFactory(expressionMap));
            try {
                final Expression expression = expressionParser.parse(expressionContext, fieldIndex, expressionTokens);
                expressionMap.put(variable, expression);
            } catch (final ParseException e) {
                throw new TokenException(keywordGroup, e.getMessage());
            }
        }
@param isLenient Ignores any additional child tokens found. This is to support getting just
                 the data source from a partially written query, which is likely to not be
                 a valid query. For example, you may type
                 <pre>{@code from View sel}</pre> and at this point do code completion on 'sel'
                 so if this method is called it will treat 'sel as an extra child.
stroom-query/stroom-query-common/src/main/java/stroom/query/language/SearchRequestFactory.java