58 else: |
58 else: |
59 raise error.ParseError(_("not a prefix: %s") % token, pos) |
59 raise error.ParseError(_("not a prefix: %s") % token, pos) |
60 # gather tokens until we meet a lower binding strength |
60 # gather tokens until we meet a lower binding strength |
61 while bind < self._elements[self.current[0]][0]: |
61 while bind < self._elements[self.current[0]][0]: |
62 token, value, pos = self._advance() |
62 token, value, pos = self._advance() |
|
63 # handle infix rules, take as suffix if unambiguous |
63 infix, suffix = self._elements[token][3:] |
64 infix, suffix = self._elements[token][3:] |
64 # check for suffix - next token isn't a valid prefix |
|
65 if suffix and not self._hasnewterm(): |
65 if suffix and not self._hasnewterm(): |
66 expr = (suffix[0], expr) |
66 expr = (suffix[0], expr) |
|
67 elif infix: |
|
68 expr = (infix[0], expr, self._parseoperand(*infix[1:])) |
67 else: |
69 else: |
68 # handle infix rules |
70 raise error.ParseError(_("not an infix: %s") % token, pos) |
69 if not infix: |
|
70 raise error.ParseError(_("not an infix: %s") % token, pos) |
|
71 expr = (infix[0], expr, self._parseoperand(*infix[1:])) |
|
72 return expr |
71 return expr |
73 def parse(self, tokeniter): |
72 def parse(self, tokeniter): |
74 'generate a parse tree from tokens' |
73 'generate a parse tree from tokens' |
75 self._iter = tokeniter |
74 self._iter = tokeniter |
76 self._advance() |
75 self._advance() |