16498Snate@binkert.org# ----------------------------------------------------------------------------- 26498Snate@binkert.org# lex_module_import.py 36498Snate@binkert.org# 46498Snate@binkert.org# A lexer defined in a module, but built in lex_module.py 56498Snate@binkert.org# ----------------------------------------------------------------------------- 66498Snate@binkert.org 76498Snate@binkert.orgtokens = ( 86498Snate@binkert.org 'NAME','NUMBER', 96498Snate@binkert.org 'PLUS','MINUS','TIMES','DIVIDE','EQUALS', 106498Snate@binkert.org 'LPAREN','RPAREN', 116498Snate@binkert.org ) 126498Snate@binkert.org 136498Snate@binkert.org# Tokens 146498Snate@binkert.org 156498Snate@binkert.orgt_PLUS = r'\+' 166498Snate@binkert.orgt_MINUS = r'-' 176498Snate@binkert.orgt_TIMES = r'\*' 186498Snate@binkert.orgt_DIVIDE = r'/' 196498Snate@binkert.orgt_EQUALS = r'=' 206498Snate@binkert.orgt_LPAREN = r'\(' 216498Snate@binkert.orgt_RPAREN = r'\)' 226498Snate@binkert.orgt_NAME = r'[a-zA-Z_][a-zA-Z0-9_]*' 236498Snate@binkert.org 246498Snate@binkert.orgdef t_NUMBER(t): 256498Snate@binkert.org r'\d+' 266498Snate@binkert.org try: 276498Snate@binkert.org t.value = int(t.value) 286498Snate@binkert.org except ValueError: 296498Snate@binkert.org print("Integer value too large %s" % t.value) 306498Snate@binkert.org t.value = 0 316498Snate@binkert.org return t 326498Snate@binkert.org 336498Snate@binkert.orgt_ignore = " \t" 346498Snate@binkert.org 356498Snate@binkert.orgdef t_newline(t): 366498Snate@binkert.org r'\n+' 376498Snate@binkert.org t.lineno += t.value.count("\n") 386498Snate@binkert.org 396498Snate@binkert.orgdef t_error(t): 406498Snate@binkert.org print("Illegal character '%s'" % t.value[0]) 416498Snate@binkert.org t.lexer.skip(1) 426498Snate@binkert.org 43