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