# HG changeset patch # User Jeff Hammel # Date 1307123496 25200 # Node ID e17a3464a0b913e91d8a88e6701cc9aa50f21783 # Parent 15fb1081784f802bf69639d551cf1fc12b783dec get precedence from a list position vs magic constants diff -r 15fb1081784f -r e17a3464a0b9 expr.py --- a/expr.py Fri Jun 03 10:16:19 2011 -0700 +++ b/expr.py Fri Jun 03 10:51:36 2011 -0700 @@ -45,33 +45,28 @@ class eq_op_token(object): "==" - lbp = 20 def led(self, parser, left): return left == parser.expression(self.lbp) class neq_op_token(object): "!=" - lbp = 20 def led(self, parser, left): return left != parser.expression(self.lbp) class and_op_token(object): "&&" - lbp = 11 def led(self, parser, left): right = parser.expression(self.lbp) return left and right class or_op_token(object): "||" - lbp = 10 def led(self, parser, left): right = parser.expression(self.lbp) return left or right class lparen_token(object): "(" - lbp = 50 def nud(self, parser): expr = parser.expression() parser.advance(rparen_token) @@ -79,11 +74,9 @@ class rparen_token(object): ")" - lbp = 0 class end_token(object): - # lowest left binding power, always ends parsing - lbp = 0 + """always ends parsing""" ### derived literal tokens @@ -106,6 +99,9 @@ (eq_op_token, neq_op_token), (lparen_token,), ] +for index, rank in enumerate(precedence): + for token in rank: + token.lbp = index # lbp = lowest left binding power class ParseError(Exception): """errror parsing conditional expression"""