- commit
- 49085514ed4e60b80b4481456ea33fbd7fc258c3
- parent
- ee5c52c73ecdcdfc002ea5e12bd93f9abbed31f7
- Author
- Tobias Bengfort <tobias.bengfort@posteo.de>
- Date
- 2022-08-26 10:17
fix operator precedence
Diffstat
| M | xipd/parser.py | 21 | +++++++++++++++++---- |
1 files changed, 17 insertions, 4 deletions
diff --git a/xipd/parser.py b/xipd/parser.py
@@ -90,7 +90,8 @@ class Parser: 90 90 91 91 def parse_expr(self, s): 92 92 return self.parse_any(s, [93 -1 self.parse_op,-1 93 self.parse_op_add, -1 94 self.parse_op_mult, 94 95 self.parse_expr_no_op, 95 96 ]) 96 97 @@ -100,12 +101,24 @@ class Parser: 100 101 _, s = self.parse_re(s, r'\)') 101 102 return expr, s 102 103103 -1 def parse_op(self, s):104 -1 left, s = self.parse_expr_no_op(s)105 -1 op, s = self.parse_re(s, r' *(\+|-|\*|/)~? *')-1 104 def parse_op_add(self, s): -1 105 left, s = self.parse_any(s, [ -1 106 self.parse_op_mult, -1 107 self.parse_expr_no_op, -1 108 ]) -1 109 op, s = self.parse_re(s, r' *(\+|-)~? *') 106 110 right, s = self.parse_expr(s) 107 111 return ('op', op.strip(), left, right), s 108 112 -1 113 def parse_op_mult(self, s): -1 114 left, s = self.parse_expr_no_op(s) -1 115 op, s = self.parse_re(s, r' *(\*|/)~? *') -1 116 right, s = self.parse_any(s, [ -1 117 self.parse_op_mult, -1 118 self.parse_expr_no_op, -1 119 ]) -1 120 return ('op', op.strip(), left, right), s -1 121 109 122 def parse_assign(self, s): 110 123 name, s = self.parse_name(s) 111 124 _, s = self.parse_re(s, r' *= *')