A test of this stuff in bookstack!
BNFProduction: publicprivateprotectedReturnType#<IDENTIFIER>FormalParametersThrowsListTreeNodeDescriptorRECOVER_TOExpansionChoice:<IDENTIFIER>:Block#ExpansionChoice;
TreeNodeDescriptor: #Nameabstractinterfacevoid(>>=<<=+-Expression)
ExpansionChoice: |1..NExpansionSequence
ExpansionSequence: LookaheadExpansionUnit!
ExpansionUnit: UNCACHE_TOKENSFailureCodeBlock#UnparsedCodeBlockAttemptBlockTryBlockAssertionExpansionWithParenthesesZeroOrOneTerminalNonTerminalInlineTreeNodeDescriptor
Failure: FAIL:ExpressionCodeBlock
AttemptBlock: ATTEMPTExpansionChoiceRECOVERExpansionWithParenthesesCodeBlock
UnparsedCodeBlock: {$<UNPARSED_CONTENT>$}
TryBlock: try{ExpansionChoice}CatchBlockFinallyBlock
Assertion: ASSERT{Expression}#~(ExpansionChoice):Expression:=>||
ExpansionWithParentheses: LexicalStateSwitchTokenActivationAssignment(ExpansionChoice)*?+!=>||
ZeroOrOne: LexicalStateSwitchTokenActivationAssignment[ExpansionChoice]!=>||
NonTerminal: Assignment<IDENTIFIER>InvocationArguments!ChildNameInfo=>||
Terminal: AssignmentRegexpStringLiteralRegexpRefEndOfFile!ChildNameInfo=>||
InlineTreeNodeDescriptor: \Assignment#Name(>>=<<=+-Expression)(Expression)
Assignment: @Name/Name/=:==?:=?=$:=$+=:+=