- Build expression tree (consisting of expression nodes). - Define all rules in src/rules.py. - Fix BisonSyntaxError location tracking. - Sort polynom by its exponents? - No possibilities found for: >>> a2b3 + a2b3 a ^ 2 * b ^ 3 + a ^ 2 * b ^ 3 - 2 + 3 + 4 rewrites to 5 instead of 5 + 4 -> the problem is that the 'root' of the application is actually a subtree of the entire expression. This means that the parent of each possibility root (or 'subtree') must me stored to be able to replace the subtree. - MESSAGES needs to be expanded. - rewrite match_combine_polynomes to an even more generic form: match_combine_factors. - Fix division by zero caused by "0/0". smvv@multivac ~/work/trs $ printf "a/0\n??" | ./main.py Traceback (most recent call last): File "./main.py", line 75, in main() File "./main.py", line 64, in main node = p.run(debug=args.debug) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 258, in run self.report_last_error(filename, e) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 251, in run self.engine.runEngine(debug) File "bison_.pyx", line 592, in bison_.ParserEngine.runEngine (build/external/pybison/bison_.c:592) File "/home/smvv/work/trs/src/parser.py", line 195, in hook_handler possibilities = handler(retval) File "/home/smvv/work/trs/src/rules/fractions.py", line 23, in match_constant_division raise ZeroDivisionError('Division by zero: %s.' % node) ZeroDivisionError: Division by zero: a / 0. smvv@multivac ~/work/trs $ printf "0/0\n??" | ./main.py Traceback (most recent call last): File "./main.py", line 75, in main() File "./main.py", line 64, in main node = p.run(debug=args.debug) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 258, in run self.report_last_error(filename, e) File "/home/smvv/work/trs/external/pybison/src/python/bison.py", line 251, in run self.engine.runEngine(debug) File "bison_.pyx", line 592, in bison_.ParserEngine.runEngine (build/external/pybison/bison_.c:592) File "/home/smvv/work/trs/src/parser.py", line 195, in hook_handler possibilities = handler(retval) File "/home/smvv/work/trs/src/rules/numerics.py", line 73, in match_divide_numerics divide = not divmod(n.value, dv)[1] ZeroDivisionError: integer division or modulo by zero - Last possibilities reduce to a similar result. smvv@multivac ~/work/trs $ printf "0/1\n??" | ./main.py Division of 0 by 1 reduces to 0. Division of 0 by 1 reduces to 0.