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*] cons Parser: parser [] send Parser "!ab" send Parser "b " send Parser "!ab" send Parser "ba !aab\n" print_xml( Parser() )