calclex.py revision 2632
12632Sstever@eecs.umich.edu# ----------------------------------------------------------------------------- 22632Sstever@eecs.umich.edu# calclex.py 32632Sstever@eecs.umich.edu# ----------------------------------------------------------------------------- 42632Sstever@eecs.umich.edu 52632Sstever@eecs.umich.edutokens = ( 62632Sstever@eecs.umich.edu 'NAME','NUMBER', 72632Sstever@eecs.umich.edu 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', 82632Sstever@eecs.umich.edu 'LPAREN','RPAREN', 92632Sstever@eecs.umich.edu ) 102632Sstever@eecs.umich.edu 112632Sstever@eecs.umich.edu# Tokens 122632Sstever@eecs.umich.edu 132632Sstever@eecs.umich.edut_PLUS = r'\+' 142632Sstever@eecs.umich.edut_MINUS = r'-' 152632Sstever@eecs.umich.edut_TIMES = r'\*' 162632Sstever@eecs.umich.edut_DIVIDE = r'/' 172632Sstever@eecs.umich.edut_EQUALS = r'=' 182632Sstever@eecs.umich.edut_LPAREN = r'\(' 192632Sstever@eecs.umich.edut_RPAREN = r'\)' 202632Sstever@eecs.umich.edut_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' 212632Sstever@eecs.umich.edu 222632Sstever@eecs.umich.edudef t_NUMBER(t): 232632Sstever@eecs.umich.edu r'\d+' 242632Sstever@eecs.umich.edu try: 252632Sstever@eecs.umich.edu t.value = int(t.value) 262632Sstever@eecs.umich.edu except ValueError: 272632Sstever@eecs.umich.edu print "Integer value too large", t.value 282632Sstever@eecs.umich.edu t.value = 0 292632Sstever@eecs.umich.edu return t 302632Sstever@eecs.umich.edu 312632Sstever@eecs.umich.edut_ignore = " \t" 322632Sstever@eecs.umich.edu 332632Sstever@eecs.umich.edudef t_newline(t): 342632Sstever@eecs.umich.edu r'\n+' 352632Sstever@eecs.umich.edu t.lineno += t.value.count("\n") 362632Sstever@eecs.umich.edu 372632Sstever@eecs.umich.edudef t_error(t): 382632Sstever@eecs.umich.edu print "Illegal character '%s'" % t.value[0] 392632Sstever@eecs.umich.edu t.skip(1) 402632Sstever@eecs.umich.edu 412632Sstever@eecs.umich.edu# Build the lexer 422632Sstever@eecs.umich.eduimport lex 432632Sstever@eecs.umich.edulex.lex() 442632Sstever@eecs.umich.edu 452632Sstever@eecs.umich.edu 462632Sstever@eecs.umich.edu 47