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