##### LM ##### lex ignore /[\t\n ]+/ literal `^ `| `- `, `: `! `? `. literal `( `) `{ `} `* `& `+ literal `-- `:> `:>> `<: `-> `** token word /[a-zA-Z_][a-zA-Z0-9_]*/ token uint /[0-9]+/ end def start [expression] { print_xml( lhs ) } def expression [term expression_op*] def expression_op [`| term] | [`& term] | [`- term] | [`-- term] def term [factor_rep term_op_list_short] # This list is done manually to get shortest match. def term_op_list_short [] | [term_op term_op_list_short] def term_op [factor_rep] | [`. factor_rep] | [`:> factor_rep] | [`:>> factor_rep] | [`<: factor_rep] def factor_rep [factor_neg factor_rep_op*] def factor_rep_op [`*] | [`**] | [`?] | [`+] | [`{ factor_rep_num `}] | [`{ `, factor_rep_num `}] | [`{ factor_rep_num `, `}] | [`{ factor_rep_num `, factor_rep_num `}] def factor_rep_num [uint] def factor_neg [`! factor_neg] | [`^ factor_neg] | [factor] def factor [alphabet_num] | [word] | [`( expression `)] def alphabet_num [uint] | [`- uint] parse start[ stdin ] print( '\n' ) ##### IN ##### 1 - 1 ##### EXP ##### 1<_repeat_factor_rep_op><_repeat_expression_op><_literal_0007>-1<_repeat_factor_rep_op>