The following code:
false & ( foo )
is invalid, and with the old parser enabled, the syntax check will complain about an unrecognized variable named "foo". That's because, when checking syntax, the old parser knows that it must not use short-circuit, and hence the expression between parentheses is always evaluated.
However, the CachingParser doesn't have such a check, and always uses short-circuit. Hence, the snippet above will pass the syntax check. This is obviously wrong. And the same goes for all other types of syntax errors, e.g.
false & ( 1 / 0 )