basiclex.py revision 6498
110037SARM gem5 Developers# An implementation of Dartmouth BASIC (1964) 212101SCurtis.Dunham@arm.com 310037SARM gem5 Developersfrom ply import * 410037SARM gem5 Developers 510037SARM gem5 Developerskeywords = ( 610037SARM gem5 Developers 'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP', 710037SARM gem5 Developers 'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW', 810037SARM gem5 Developers) 910037SARM gem5 Developers 1010037SARM gem5 Developerstokens = keywords + ( 1110037SARM gem5 Developers 'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER', 1210037SARM gem5 Developers 'LPAREN','RPAREN','LT','LE','GT','GE','NE', 1310037SARM gem5 Developers 'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING', 1410037SARM gem5 Developers 'ID','NEWLINE' 1510037SARM gem5 Developers) 1610037SARM gem5 Developers 1710037SARM gem5 Developerst_ignore = ' \t' 1810037SARM gem5 Developers 1910037SARM gem5 Developersdef t_REM(t): 2010037SARM gem5 Developers r'REM .*' 2110037SARM gem5 Developers return t 2210037SARM gem5 Developers 2310037SARM gem5 Developersdef t_ID(t): 2410037SARM gem5 Developers r'[A-Z][A-Z0-9]*' 2510037SARM gem5 Developers if t.value in keywords: 2610037SARM gem5 Developers t.type = t.value 2710037SARM gem5 Developers return t 2810037SARM gem5 Developers 2910037SARM gem5 Developerst_EQUALS = r'=' 3010037SARM gem5 Developerst_PLUS = r'\+' 3110037SARM gem5 Developerst_MINUS = r'-' 3210037SARM gem5 Developerst_TIMES = r'\*' 3310037SARM gem5 Developerst_POWER = r'\^' 3410037SARM gem5 Developerst_DIVIDE = r'/' 3510037SARM gem5 Developerst_LPAREN = r'\(' 3610037SARM gem5 Developerst_RPAREN = r'\)' 3710037SARM gem5 Developerst_LT = r'<' 3810844Sandreas.sandberg@arm.comt_LE = r'<=' 3910037SARM gem5 Developerst_GT = r'>' 4010037SARM gem5 Developerst_GE = r'>=' 4110037SARM gem5 Developerst_NE = r'<>' 4210037SARM gem5 Developerst_COMMA = r'\,' 4310037SARM gem5 Developerst_SEMI = r';' 4410844Sandreas.sandberg@arm.comt_INTEGER = r'\d+' 4512102SCurtis.Dunham@arm.comt_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))' 4610037SARM gem5 Developerst_STRING = r'\".*?\"' 4710844Sandreas.sandberg@arm.com 4810037SARM gem5 Developersdef t_NEWLINE(t): 4910037SARM gem5 Developers r'\n' 5010037SARM gem5 Developers t.lexer.lineno += 1 5110037SARM gem5 Developers return t 5210037SARM gem5 Developers 5310037SARM gem5 Developersdef t_error(t): 5410037SARM gem5 Developers print("Illegal character %s" % t.value[0]) 5510037SARM gem5 Developers t.lexer.skip(1) 5610037SARM gem5 Developers 5710844Sandreas.sandberg@arm.comlex.lex(debug=0) 5810847Sandreas.sandberg@arm.com 5910037SARM gem5 Developers 6010844Sandreas.sandberg@arm.com 6110844Sandreas.sandberg@arm.com 6210905Sandreas.sandberg@arm.com 6310844Sandreas.sandberg@arm.com 6410844Sandreas.sandberg@arm.com 6510844Sandreas.sandberg@arm.com 6610844Sandreas.sandberg@arm.com 6710844Sandreas.sandberg@arm.com 6810844Sandreas.sandberg@arm.com 6910844Sandreas.sandberg@arm.com 7010844Sandreas.sandberg@arm.com 7110844Sandreas.sandberg@arm.com 7212733Sandreas.sandberg@arm.com 7310844Sandreas.sandberg@arm.com 7412733Sandreas.sandberg@arm.com 7512733Sandreas.sandberg@arm.com