calclex.py revision 2632:1bb2f91485ea
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