namespace r1 lex literal `! `a `b ignore /[ \n\t]+/ end def line [ `! `a `b `b `a] end # r1 namespace r2 lex literal `! token id /[a-zA-Z_]+/ ignore /[ \n\t]+/ end def line [ `! id ] end # r2 def item [r1::line] | [r2::line] def btscan [item*] Parser: parser = new parser() send Parser "!ab" send Parser "b " send Parser "!ab" send Parser "ba !aab\n" print_xml( Parser->finish() ) print( '\n' ) ##### EXP ##### <_repeat_item>!abb!abba!aab