Mercurial > hg > expressionparser
comparison expr.py @ 15:6f0c032b65f5 default tip
add a not token, i hope!
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Fri, 03 Jun 2011 13:01:22 -0700 |
| parents | ec0e83ec329f |
| children |
comparison
equal
deleted
inserted
replaced
| 14:facdc089ffbc | 15:6f0c032b65f5 |
|---|---|
| 55 class neq_op_token(object): | 55 class neq_op_token(object): |
| 56 "!=" | 56 "!=" |
| 57 def led(self, parser, left): | 57 def led(self, parser, left): |
| 58 return left != parser.expression(self.lbp) | 58 return left != parser.expression(self.lbp) |
| 59 | 59 |
| 60 class not_op_token(object): | |
| 61 "!" | |
| 62 def nud(self, parser): | |
| 63 return not parser.expression() | |
| 64 | |
| 60 class and_op_token(object): | 65 class and_op_token(object): |
| 61 "&&" | 66 "&&" |
| 62 def led(self, parser, left): | 67 def led(self, parser, left): |
| 63 right = parser.expression(self.lbp) | 68 right = parser.expression(self.lbp) |
| 64 return left and right | 69 return left and right |
| 132 def or_(scanner, t): return or_op_token() | 137 def or_(scanner, t): return or_op_token() |
| 133 def and_(scanner, t): return and_op_token() | 138 def and_(scanner, t): return and_op_token() |
| 134 def lparen(scanner, t): return lparen_token() | 139 def lparen(scanner, t): return lparen_token() |
| 135 def rparen(scanner, t): return rparen_token() | 140 def rparen(scanner, t): return rparen_token() |
| 136 def string_(scanner, t): return string_token(t) | 141 def string_(scanner, t): return string_token(t) |
| 142 def not_(scanner, t): return not_op_token() | |
| 137 | 143 |
| 138 scanner = re.Scanner([ | 144 scanner = re.Scanner([ |
| 139 (r"true|false", bool_), | 145 (r"true|false", bool_), |
| 140 (r"[a-zA-Z_]\w*", identifier), | 146 (r"[a-zA-Z_]\w*", identifier), |
| 141 (r"[0-9]+", integer), | 147 (r"[0-9]+", integer), |
| 142 (r'("[^"]*")|(\'[^\']*\')', string_), | 148 (r'("[^"]*")|(\'[^\']*\')', string_), |
| 143 (r"==", eq), | 149 (r"==", eq), |
| 144 (r"!=", neq), | 150 (r"!=", neq), |
| 145 (r"\|\|", or_), | 151 (r"\|\|", or_), |
| 152 (r"!", not_), | |
| 146 (r"&&", and_), | 153 (r"&&", and_), |
| 147 (r"\(", lparen), | 154 (r"\(", lparen), |
| 148 (r"\)", rparen), | 155 (r"\)", rparen), |
| 149 (r"\s+", None), # skip whitespace | 156 (r"\s+", None), # skip whitespace |
| 150 ]) | 157 ]) |
