comparison expr.py @ 8:9b2bf000aeed

add an int token
author Jeff Hammel <jhammel@mozilla.com>
date Fri, 03 Jun 2011 08:32:57 -0700
parents 325dccc38308
children 421e26c0299f
comparison
equal deleted inserted replaced
7:325dccc38308 8:9b2bf000aeed
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 ### derived literal tokens
86
85 class bool_token(literal_token): 87 class bool_token(literal_token):
86 def __init__(self, value): 88 def __init__(self, value):
87 value = {'true':True, 'false':False}[value] 89 value = {'true':True, 'false':False}[value]
88 literal_token.__init__(self, value) 90 literal_token.__init__(self, value)
91
92 class int_token(literal_token):
93 def __init__(self, value):
94 literal_token.__init__(self, int(value))
89 95
90 precedence = [(end_token, rparen_token), 96 precedence = [(end_token, rparen_token),
91 (or_op_token,), 97 (or_op_token,),
92 (and_op_token,), 98 (and_op_token,),
93 (eq_op_token, neq_op_token), 99 (eq_op_token, neq_op_token),
111 Lex the input text into tokens and yield them in sequence. 117 Lex the input text into tokens and yield them in sequence.
112 """ 118 """
113 # scanner callbacks 119 # scanner callbacks
114 def bool_(scanner, t): return bool_token(t) 120 def bool_(scanner, t): return bool_token(t)
115 def identifier(scanner, t): return ident_token(t) 121 def identifier(scanner, t): return ident_token(t)
116 def integer(scanner, t): return literal_token(int(t)) 122 def integer(scanner, t): return int_token(t)
117 def eq(scanner, t): return eq_op_token() 123 def eq(scanner, t): return eq_op_token()
118 def neq(scanner, t): return neq_op_token() 124 def neq(scanner, t): return neq_op_token()
119 def or_(scanner, t): return or_op_token() 125 def or_(scanner, t): return or_op_token()
120 def and_(scanner, t): return and_op_token() 126 def and_(scanner, t): return and_op_token()
121 def lparen(scanner, t): return lparen_token() 127 def lparen(scanner, t): return lparen_token()