1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
# Token names. lex start { literal '+', '*' token number /[0-9]+/ ignore ws / [ \t\n]+ / } def F [number '+'] | [number] | [F '*' number] def E [E '+' F] | [F] def start [E] parse SP: start[ stdin ] S: start = SP.tree R: start = match S ~ 9 + 9 print_xml( R )