#!/usr/bin/python3 """Demonstrate compiling infix to postfix with straightpin.""" import sys import re import straightpin wsp = re.compile(r'\s*') num = lambda _2, n, _: int(n.group()), ('not','666 '), re.compile('[0-9]+'), wsp atom = lambda: ('or', num, group) expr = [atom, ('any', ('or', (lambda _, _2, n: [n, 'add'], '+', wsp, atom), (lambda _, _2, n: [n, 'sub'], '-', wsp, atom)))] group = lambda _, _2, n, _3, _4: n, '(', wsp, expr, ')', wsp grammar = lambda _, v: v, wsp, expr def main(argv): s = '37 + 53 - (1 - 3)' if len(argv) < 2 else argv[1] return straightpin.parse(grammar, s) if __name__ == '__main__': print(main(sys.argv))