Mercurial > hg > expressionparser
comparison expr.py @ 3:5ac8eed85684
consolidate token classes
| author | Ted Mielczarek <ted.mielczarek@gmail.com> |
|---|---|
| date | Thu, 02 Jun 2011 07:47:33 -0400 |
| parents | 94a293b914af |
| children | a42bb6dc2fa7 |
comparison
equal
deleted
inserted
replaced
| 2:94a293b914af | 3:5ac8eed85684 |
|---|---|
| 32 def nud(self, parser): | 32 def nud(self, parser): |
| 33 # identifiers take their value from the value mappings passed | 33 # identifiers take their value from the value mappings passed |
| 34 # to the parser | 34 # to the parser |
| 35 return parser.value(self.value) | 35 return parser.value(self.value) |
| 36 | 36 |
| 37 class int_token: | 37 class literal_token: |
| 38 def __init__(self, value): | 38 def __init__(self, value): |
| 39 self.value = int(value) | 39 self.value = value |
| 40 def nud(self, parser): | |
| 41 return self.value | |
| 42 | |
| 43 class bool_token: | |
| 44 def __init__(self, value): | |
| 45 self.value = {'true':True, 'false':False}[value] | |
| 46 def nud(self, parser): | 40 def nud(self, parser): |
| 47 return self.value | 41 return self.value |
| 48 | 42 |
| 49 class eq_op_token: | 43 class eq_op_token: |
| 50 "==" | 44 "==" |
| 82 | 76 |
| 83 class rparen_token: | 77 class rparen_token: |
| 84 ")" | 78 ")" |
| 85 lbp = 0 | 79 lbp = 0 |
| 86 | 80 |
| 87 class string_token: | |
| 88 def __init__(self, value): | |
| 89 self.value = value | |
| 90 def nud(self, parser): | |
| 91 return self.value | |
| 92 | |
| 93 class end_token: | 81 class end_token: |
| 94 # lowest left binding power, always ends parsing | 82 # lowest left binding power, always ends parsing |
| 95 lbp = 0 | 83 lbp = 0 |
| 96 | 84 |
| 97 class ParseError(Exception): | 85 class ParseError(Exception): |
| 109 def _tokenize(self): | 97 def _tokenize(self): |
| 110 """ | 98 """ |
| 111 Lex the input text into tokens and yield them in sequence. | 99 Lex the input text into tokens and yield them in sequence. |
| 112 """ | 100 """ |
| 113 # scanner callbacks | 101 # scanner callbacks |
| 114 def bool_(scanner, t): return bool_token(t) | 102 def bool_(scanner, t): return literal_token({'true':True, 'false':False}[t]) |
| 115 def identifier(scanner, t): return ident_token(t) | 103 def identifier(scanner, t): return ident_token(t) |
| 116 def integer(scanner, t): return int_token(t) | 104 def integer(scanner, t): return literal_token(int(t)) |
| 117 def eq(scanner, t): return eq_op_token() | 105 def eq(scanner, t): return eq_op_token() |
| 118 def neq(scanner, t): return neq_op_token() | 106 def neq(scanner, t): return neq_op_token() |
| 119 def or_(scanner, t): return or_op_token() | 107 def or_(scanner, t): return or_op_token() |
| 120 def and_(scanner, t): return and_op_token() | 108 def and_(scanner, t): return and_op_token() |
| 121 def lparen(scanner, t): return lparen_token() | 109 def lparen(scanner, t): return lparen_token() |
| 122 def rparen(scanner, t): return rparen_token() | 110 def rparen(scanner, t): return rparen_token() |
| 123 def string_(scanner, t): return string_token(t[1:-1]) | 111 def string_(scanner, t): return literal_token(t[1:-1]) |
| 124 | 112 |
| 125 scanner = re.Scanner([ | 113 scanner = re.Scanner([ |
| 126 (r"true|false", bool_), | 114 (r"true|false", bool_), |
| 127 (r"[a-zA-Z_]\w*", identifier), | 115 (r"[a-zA-Z_]\w*", identifier), |
| 128 (r"[0-9]+", integer), | 116 (r"[0-9]+", integer), |
