@@ -183,25 +183,31 @@ class Parser(ParserBase):
183
183
t_ATTR = r'(?<=\S)\.(?=[a-zA-Z_][a-zA-Z0-9_]*)'
184
184
t_ATTR_SAFE = r'(?<=\S)&\.(?=[a-zA-Z_][a-zA-Z0-9_]*)'
185
185
186
- # tokens are listed from lowest to highest precedence, ones that appear
187
- # later are effectively evaluated first
188
- # see: https://en.wikipedia.org/wiki/Order_of_operations#Programming_languages
189
- precedence = (
190
- ('left' , 'OR' ),
191
- ('left' , 'AND' ),
192
- ('right' , 'NOT' ),
193
- ('left' , 'BWOR' ),
194
- ('left' , 'BWXOR' ),
195
- ('left' , 'BWAND' ),
196
- ('right' , 'QMARK' , 'COLON' ),
197
- ('nonassoc' , 'EQ' , 'NE' , 'EQ_FZM' , 'EQ_FZS' , 'NE_FZM' , 'NE_FZS' , 'GE' , 'GT' , 'LE' , 'LT' , 'IN' ), # Nonassociative operators
198
- ('left' , 'ADD' , 'SUB' ),
199
- ('left' , 'BWLSH' , 'BWRSH' ),
200
- ('left' , 'MUL' , 'TDIV' , 'FDIV' , 'MOD' ),
201
- ('left' , 'POW' ),
202
- ('right' , 'UMINUS' ),
203
- ('left' , 'ATTR' , 'ATTR_SAFE' ),
204
- )
186
+ # Tokens are listed from highest to lowest precedence, ones that appear
187
+ # later are effectively evaluated last
188
+ # see:
189
+ # * https://en.wikipedia.org/wiki/Order_of_operations#Programming_languages
190
+ # * https://docs.python.org/3/reference/expressions.html
191
+ precedence = tuple (
192
+ # reverse the order to lowest to highest for ply
193
+ reversed ((
194
+ ('nonassoc' , 'LPAREN' , 'RPAREN' ),
195
+ ('left' , 'ATTR' , 'ATTR_SAFE' ),
196
+ ('right' , 'UMINUS' ),
197
+ ('left' , 'POW' ),
198
+ ('left' , 'MUL' , 'TDIV' , 'FDIV' , 'MOD' ),
199
+ ('left' , 'BWLSH' , 'BWRSH' ),
200
+ ('left' , 'ADD' , 'SUB' ),
201
+ ('nonassoc' , 'EQ' , 'NE' , 'EQ_FZM' , 'EQ_FZS' , 'NE_FZM' , 'NE_FZS' , 'GE' , 'GT' , 'LE' , 'LT' , 'IN' ), # Nonassociative operators
202
+ ('right' , 'QMARK' , 'COLON' ),
203
+ ('left' , 'BWAND' ),
204
+ ('left' , 'BWXOR' ),
205
+ ('left' , 'BWOR' ),
206
+ ('right' , 'NOT' ),
207
+ ('left' , 'AND' ),
208
+ ('left' , 'OR' ),
209
+ )
210
+ ))
205
211
206
212
@classmethod
207
213
def get_token_regex (cls , token_name ):
0 commit comments