AbuseFilterParser supports the following empty operators, whereas the CachingParser does not:
- `(foo|)` is equivalent to `foo`
- `(foo&)` is equivalent to `false`
- `(foo&!)` is equivalent to `foo`
- `(!)` is equivalent to `true`
- `if () ...`
- `if ( cond ) then () ...`
- `if ( cond ) then ( ... ) else () end`
- `var := `
and also others, see AbuseFilterParserTest::testEmptyOperands.
In all cases, the missing argument of a boolean operator is treated as `null`.
With this fact, people could inadvertently break filters if they leave a leading operator, so we should really stop allowing it. We should first emit debug notices, then fix filters for WMF prod, and then drop support.
**Reminder**: We should also make empty operands throw an AFPUserVisibleException in the new parser. That would allow us to catch and ignore it during filter execution. Right now it fails very hard with a TypeError.