calclex.py revision 2632
1# ----------------------------------------------------------------------------- 2# calclex.py 3# ----------------------------------------------------------------------------- 4 5tokens = ( 6 'NAME','NUMBER', 7 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', 8 'LPAREN','RPAREN', 9 ) 10 11# Tokens 12 13t_PLUS = r'\+' 14t_MINUS = r'-' 15t_TIMES = r'\*' 16t_DIVIDE = r'/' 17t_EQUALS = r'=' 18t_LPAREN = r'\(' 19t_RPAREN = r'\)' 20t_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' 21 22def t_NUMBER(t): 23 r'\d+' 24 try: 25 t.value = int(t.value) 26 except ValueError: 27 print "Integer value too large", t.value 28 t.value = 0 29 return t 30 31t_ignore = " \t" 32 33def t_newline(t): 34 r'\n+' 35 t.lineno += t.value.count("\n") 36 37def t_error(t): 38 print "Illegal character '%s'" % t.value[0] 39 t.skip(1) 40 41# Build the lexer 42import lex 43lex.lex() 44 45 46 47