?value: root root: (pc | dur_change | oct_mod | oct_change | WS | chord | cycle | random_integer | random_pitch | random_percent | range | list | subdivision)* list: "(" root ")" random_integer: /\(-?[0-9]+,-?[0-9]+\)/ range: /-?[0-9]\.\.-?[0-9]/ cycle: "<" root ">" pc: prefix* pitch pitch: /-?[0-9TE]/ random_pitch: "?" random_percent: "%" prefix: (octave | duration_chars | escaped_decimal | escaped_octave) oct_change: escaped_octave WS escaped_octave: /<-?[0-9]>/ oct_mod: octave WS octave: /[_^]+/ chord: pc pc+ escaped_decimal: "<" decimal ">" dur_change: (duration_chars | decimal) WS duration_chars: dotted_dur+ dotted_dur: dchar dot* decimal: /-?[0-9]+\.[0-9]+/ dchar: /[mklpdcwyhnqaefsxtgujzo]/ dot: "." subitems: (pc | WS | chord | cycle | subdivision)* subdivision: "[" subitems "]" %import common.SIGNED_NUMBER %import common.WS