Test cases for proper call parsing. sdr> /program = Program.C4; C4 sdr> /// sdr> /// simple examples sdr> /parse("trade") trade sdr> /parse("trade and roll") and roll(trade) sdr> /parse("do half of a trade and roll") and roll(_half(trade)) sdr> /parse('do half of a trade twice') _fractional(2, _half(trade)) sdr> /parse('do half of a trade twice and roll') and roll(_fractional(2, _half(trade))) sdr> /// sdr> /// precedence levels sdr> /parse("trade twice and roll") and roll(_fractional(2, trade)) sdr> /parse("trade and roll twice") _fractional(2, and roll(trade)) sdr> /parse("boys roll the girls away") _roll away(BOY, GIRL) sdr> /// tandem binds looser than 'roll'; if you want sdr> /// something else, call "tandem trade and invidually roll" sdr> /// or "tandem trade ; roll" sdr> /parse("tandem trade and roll") tandem(and roll(trade)) sdr> /parse("tandem trade and individually roll") and individually roll(tandem(trade)) sdr> /parse("tandem roll") tandem(roll) sdr> /// sdr> /// "anyone anything" concept sdr> /parse("centers square thru and roll") anyone while others(CENTER, and roll(_full_square_thru), nothing) sdr> /parse("centers centers run") anyone while others(CENTER, run(CENTER), nothing) sdr> /// sdr> /// tricky roll away examples sdr> /parse("centers roll away") anyone while others(CENTER, roll away, nothing) sdr> /parse("centers roll the ends away") _roll away(CENTER, END) sdr> /parse("centers centers roll the ends away") anyone while others(CENTER, _roll away(CENTER, END), nothing) sdr> /// sdr> /// precedence of -vs- roll sdr> /parse("centers trade while the ends trade and roll") anyone while others(CENTER, trade, and roll(trade)) sdr> /// sdr> /// precedence of 'down the middle and ...' sdr> /parse("sides down the middle") down the middle(SIDE, nothing) sdr> /parse("heads down the middle and as couples touch 1/4") down the middle(HEAD, as couples(_touch(1/4))) sdr> /// sdr> /// precedence of mirror sdr> /parse("mirror tandem trade") mirror(tandem(trade)) sdr> /// sdr> /// precedence of mirror -vs- left sdr> /parse("left swing thru and roll") and roll(left(swing thru)) sdr> /parse("mirror swing thru and roll") mirror(and roll(swing thru)) sdr> /// sdr> /// trade down the line: sdr> /parse('boys trade down the line') trade down the line(BOY) sdr> /// the "anyone while others" call has a special case to make sdr> /// "boys trade" equivalent to "boys trade down the line" sdr> /parse('boys trade') anyone while others(BOY, trade, nothing) sdr> /// sdr> /// precedence of "as couples" vs roll sdr> /parse('as couples trade and roll') as couples(and roll(trade)) sdr> /// XXX: as couples swing and mix? sdr> /exit