- commit
- 89750318d03c797ab6a46a92327505108f92601f
- parent
- 29f448dfa4db0427f0cc4d02f1022fb6eb3abee5
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2024-07-06 16:35
fix operators left-associative
Diffstat
| M | sheet/expression.py | 40 | ++++++++++++++++++---------------------- |
1 files changed, 18 insertions, 22 deletions
diff --git a/sheet/expression.py b/sheet/expression.py
@@ -77,20 +77,6 @@ def parse_brace(text): 77 77 return exp, tail 78 78 79 7980 -1 def parse_add(text):81 -1 lhs, tail = parse_expression2(text)82 -1 m, tail = parse_re(tail, r'\s*[-+]\s*')83 -1 rhs, tail = parse_expression(tail)84 -1 return (m[0].strip(), lhs, rhs), tail85 -186 -187 -1 def parse_mul(text):88 -1 lhs, tail = parse_expression3(text)89 -1 m, tail = parse_re(tail, r'\s*[*/]\s*')90 -1 rhs, tail = parse_expression2(tail)91 -1 return (m[0].strip(), lhs, rhs), tail92 -193 -194 80 def parse_call(text): 95 81 m, tail = parse_re(text, r'[a-zA-Z][a-zA-Z0-9]*') 96 82 _, tail = parse_re(tail, r'\(') @@ -119,17 +105,27 @@ def parse_expression3(text): 119 105 120 106 121 107 def parse_expression2(text):122 -1 return parse_any(text, [123 -1 parse_mul,124 -1 parse_expression3,125 -1 ])-1 108 lhs, tail = parse_expression3(text) -1 109 while True: -1 110 try: -1 111 m, tail = parse_re(tail, r'\s*[*/]\s*') -1 112 except ParseError: -1 113 break -1 114 rhs, tail = parse_expression3(tail) -1 115 lhs = m[0].strip(), lhs, rhs -1 116 return lhs, tail 126 117 127 118 128 119 def parse_expression(text):129 -1 return parse_any(text, [130 -1 parse_add,131 -1 parse_expression2,132 -1 ])-1 120 lhs, tail = parse_expression2(text) -1 121 while True: -1 122 try: -1 123 m, tail = parse_re(tail, r'\s*[-+]\s*') -1 124 except ParseError: -1 125 break -1 126 rhs, tail = parse_expression2(tail) -1 127 lhs = m[0].strip(), lhs, rhs -1 128 return lhs, tail 133 129 134 130 135 131 def parse(text):