Mercurial > hg > expressionparser
comparison expr.py @ 7:325dccc38308
begin using subclasses for tokens; the eventual goal is that a token class will know everything it can about what it is and the parser just knows about what tokens are
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Fri, 03 Jun 2011 08:31:29 -0700 |
| parents | a42bb6dc2fa7 |
| children | 9b2bf000aeed |
comparison
equal
deleted
inserted
replaced
| 6:4b07bb71c218 | 7:325dccc38308 |
|---|---|
| 80 | 80 |
| 81 class end_token(object): | 81 class end_token(object): |
| 82 # lowest left binding power, always ends parsing | 82 # lowest left binding power, always ends parsing |
| 83 lbp = 0 | 83 lbp = 0 |
| 84 | 84 |
| 85 class bool_token(literal_token): | |
| 86 def __init__(self, value): | |
| 87 value = {'true':True, 'false':False}[value] | |
| 88 literal_token.__init__(self, value) | |
| 89 | |
| 85 precedence = [(end_token, rparen_token), | 90 precedence = [(end_token, rparen_token), |
| 86 (or_op_token,), | 91 (or_op_token,), |
| 87 (and_op_token,), | 92 (and_op_token,), |
| 88 (eq_op_token, neq_op_token), | 93 (eq_op_token, neq_op_token), |
| 89 (lparen_token,), | 94 (lparen_token,), |
| 104 def _tokenize(self): | 109 def _tokenize(self): |
| 105 """ | 110 """ |
| 106 Lex the input text into tokens and yield them in sequence. | 111 Lex the input text into tokens and yield them in sequence. |
| 107 """ | 112 """ |
| 108 # scanner callbacks | 113 # scanner callbacks |
| 109 def bool_(scanner, t): return literal_token({'true':True, 'false':False}[t]) | 114 def bool_(scanner, t): return bool_token(t) |
| 110 def identifier(scanner, t): return ident_token(t) | 115 def identifier(scanner, t): return ident_token(t) |
| 111 def integer(scanner, t): return literal_token(int(t)) | 116 def integer(scanner, t): return literal_token(int(t)) |
| 112 def eq(scanner, t): return eq_op_token() | 117 def eq(scanner, t): return eq_op_token() |
| 113 def neq(scanner, t): return neq_op_token() | 118 def neq(scanner, t): return neq_op_token() |
| 114 def or_(scanner, t): return or_op_token() | 119 def or_(scanner, t): return or_op_token() |
