lex ignore /space+/ literal '*', '(' ni, ni ')', '!', ';' token id /[a-zA-Z_0-9]+/ end lex ignore /space+/ token inner_t /[a-zA-Z_0-9]+/ literal '' end def inner ['' inner_t*] def item [id] | ['(' inner ')'] def start [item* ';'] parse StartP: start[ stdin ] Start: start = StartP.tree if ( ! Start ) { print( 'parse error\n' ) exit( 0 ) } for I: item in Start { print( 'item: .' %I '.\n' ) if match I [ O: '(' Inner: inner C: ')' ] print( 'innr: .' %O '.' %Inner '.' %C '.\n' ) }