14479Sbinkertn@umich.edu# An implementation of Dartmouth BASIC (1964) 24479Sbinkertn@umich.edu 34479Sbinkertn@umich.edufrom ply import * 44479Sbinkertn@umich.edu 54479Sbinkertn@umich.edukeywords = ( 64479Sbinkertn@umich.edu 'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP', 74479Sbinkertn@umich.edu 'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW', 84479Sbinkertn@umich.edu) 94479Sbinkertn@umich.edu 104479Sbinkertn@umich.edutokens = keywords + ( 114479Sbinkertn@umich.edu 'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER', 124479Sbinkertn@umich.edu 'LPAREN','RPAREN','LT','LE','GT','GE','NE', 134479Sbinkertn@umich.edu 'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING', 144479Sbinkertn@umich.edu 'ID','NEWLINE' 154479Sbinkertn@umich.edu) 164479Sbinkertn@umich.edu 174479Sbinkertn@umich.edut_ignore = ' \t' 184479Sbinkertn@umich.edu 194479Sbinkertn@umich.edudef t_REM(t): 204479Sbinkertn@umich.edu r'REM .*' 214479Sbinkertn@umich.edu return t 224479Sbinkertn@umich.edu 234479Sbinkertn@umich.edudef t_ID(t): 244479Sbinkertn@umich.edu r'[A-Z][A-Z0-9]*' 254479Sbinkertn@umich.edu if t.value in keywords: 264479Sbinkertn@umich.edu t.type = t.value 274479Sbinkertn@umich.edu return t 286498Snate@binkert.org 294479Sbinkertn@umich.edut_EQUALS = r'=' 304479Sbinkertn@umich.edut_PLUS = r'\+' 314479Sbinkertn@umich.edut_MINUS = r'-' 324479Sbinkertn@umich.edut_TIMES = r'\*' 334479Sbinkertn@umich.edut_POWER = r'\^' 344479Sbinkertn@umich.edut_DIVIDE = r'/' 354479Sbinkertn@umich.edut_LPAREN = r'\(' 364479Sbinkertn@umich.edut_RPAREN = r'\)' 374479Sbinkertn@umich.edut_LT = r'<' 384479Sbinkertn@umich.edut_LE = r'<=' 394479Sbinkertn@umich.edut_GT = r'>' 404479Sbinkertn@umich.edut_GE = r'>=' 414479Sbinkertn@umich.edut_NE = r'<>' 424479Sbinkertn@umich.edut_COMMA = r'\,' 434479Sbinkertn@umich.edut_SEMI = r';' 446498Snate@binkert.orgt_INTEGER = r'\d+' 454479Sbinkertn@umich.edut_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))' 464479Sbinkertn@umich.edut_STRING = r'\".*?\"' 474479Sbinkertn@umich.edu 484479Sbinkertn@umich.edudef t_NEWLINE(t): 494479Sbinkertn@umich.edu r'\n' 504479Sbinkertn@umich.edu t.lexer.lineno += 1 514479Sbinkertn@umich.edu return t 524479Sbinkertn@umich.edu 534479Sbinkertn@umich.edudef t_error(t): 546498Snate@binkert.org print("Illegal character %s" % t.value[0]) 554479Sbinkertn@umich.edu t.lexer.skip(1) 564479Sbinkertn@umich.edu 576498Snate@binkert.orglex.lex(debug=0) 584479Sbinkertn@umich.edu 594479Sbinkertn@umich.edu 604479Sbinkertn@umich.edu 614479Sbinkertn@umich.edu 624479Sbinkertn@umich.edu 634479Sbinkertn@umich.edu 644479Sbinkertn@umich.edu 656498Snate@binkert.org 666498Snate@binkert.org 676498Snate@binkert.org 686498Snate@binkert.org 694479Sbinkertn@umich.edu 704479Sbinkertn@umich.edu 714479Sbinkertn@umich.edu 724479Sbinkertn@umich.edu 734479Sbinkertn@umich.edu 744479Sbinkertn@umich.edu 75