[ 'hi OPT [ 'yoyo OPT [ 'crazy | 'very 'happy ] ] OPT string! ] { T: block V: [ { T: lit-word V: hi }, { T: block M: opt V: [ { T: lit-word V: yoyo } { T: or-block M: opt V: [ [ { T: lit-word V: crazy } ] [ { T: lit-word V: very } { T: lit-word V: happy } ] ]} ]} { T: type M: opt V: string } ]}