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