It seems that using multiple “?” symbols slows down the compilation a lot. On the forum, in one of the answers you had mentioned that this happens because the symbol expands the given expression. For example,
a? b c? expands to
b | a b | b c | a b c.
Now consider an expression like
(a|b)? Does this expression expand to
(a|b| null token) ? Is there such a thing as a null token that can be defined?