calclex.py revision 6498
17090SN/A# -----------------------------------------------------------------------------
27090SN/A# calclex.py
37090SN/A# -----------------------------------------------------------------------------
47090SN/Aimport sys
57090SN/A
67090SN/Aif ".." not in sys.path: sys.path.insert(0,"..")
77090SN/Aimport ply.lex as lex
87090SN/A
97090SN/Atokens = (
107090SN/A    'NAME','NUMBER',
117090SN/A    'PLUS','MINUS','TIMES','DIVIDE','EQUALS',
127090SN/A    'LPAREN','RPAREN',
134486SN/A    )
144486SN/A
154486SN/A# Tokens
164486SN/A
174486SN/At_PLUS    = r'\+'
184486SN/At_MINUS   = r'-'
194486SN/At_TIMES   = r'\*'
204486SN/At_DIVIDE  = r'/'
214486SN/At_EQUALS  = r'='
224486SN/At_LPAREN  = r'\('
234486SN/At_RPAREN  = r'\)'
244486SN/At_NAME    = r'[a-zA-Z_][a-zA-Z0-9_]*'
254486SN/A
264486SN/Adef t_NUMBER(t):
274486SN/A    r'\d+'
284486SN/A    try:
294486SN/A        t.value = int(t.value)
304486SN/A    except ValueError:
314486SN/A        print("Integer value too large %s" % t.value)
324486SN/A        t.value = 0
334486SN/A    return t
344486SN/A
354486SN/At_ignore = " \t"
364486SN/A
374486SN/Adef t_newline(t):
384486SN/A    r'\n+'
397584SAli.Saidi@arm.com    t.lineno += t.value.count("\n")
407584SAli.Saidi@arm.com
417754SWilliam.Wang@arm.comdef t_error(t):
424486SN/A    print("Illegal character '%s'" % t.value[0])
433630SN/A    t.lexer.skip(1)
443630SN/A
457587SAli.Saidi@arm.com# Build the lexer
468212SAli.Saidi@ARM.comlex.lex()
475478SN/A
485478SN/A
497584SAli.Saidi@arm.com
503630SN/A