lex ignore /space+/ literal `* `( `) token id /[a-zA-Z_]+/ end def item [id] | [`( item* `)] def start [item*] parse Input: start[ stdin ] match Input [ItemList: item*] for I: item* in repeat( ItemList ) print( ^I, '\n' ) for I: item* in rev_repeat( ItemList ) print( ^I, '\n' ) ##### IN ##### a b ( c d ) e ( f g ) h i ##### EXP ##### a b ( c d ) e ( f g ) h i b ( c d ) e ( f g ) h i ( c d ) e ( f g ) h i e ( f g ) h i ( f g ) h i h i i i h i ( f g ) h i e ( f g ) h i ( c d ) e ( f g ) h i b ( c d ) e ( f g ) h i a b ( c d ) e ( f g ) h i