Provides parser.
Provides parser.
Required to examine child parsers, and optimize itself out by propagating NadaParser if there is no parser.
Provides unparser.
Provides unparser.
Required to examine child unparsers, and optimize itself out by propagating NadaUnparser if there is no unparser.
This || operator means one of the operands ONLY.
This || operator means one of the operands ONLY. I.e., statically they are supposed to be mutually exclusive, so only one (or none) of them should ever survive.
Sequential composition operator in the grammar.
Sequential composition operator in the grammar.
Note: This should not evaluate the argument unless it has to.
BinaryGram isn't really 'binary' it's n-ary. It is called binary because it comes from the binary grammar operations ~ and |, but in the abstract syntax tree we want these flattened to lists of children so that a ~ b ~ c is ONE SeqComp with 3 children, not a tree of two binary SeqComps.