xipd

programming language for audio processing that compiles to PureData
git clone https://git.ce9e.org/xipd.git

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   103 
  103    -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' *= *')