basiclex.py revision 4479
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
284479Sbinkertn@umich.edu
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';'
444479Sbinkertn@umich.edut_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):
544479Sbinkertn@umich.edu    print "Illegal character", t.value[0]
554479Sbinkertn@umich.edu    t.lexer.skip(1)
564479Sbinkertn@umich.edu
574479Sbinkertn@umich.edulex.lex()
584479Sbinkertn@umich.edu
594479Sbinkertn@umich.edu
604479Sbinkertn@umich.edu
614479Sbinkertn@umich.edu
624479Sbinkertn@umich.edu
634479Sbinkertn@umich.edu
644479Sbinkertn@umich.edu
654479Sbinkertn@umich.edu
664479Sbinkertn@umich.edu
674479Sbinkertn@umich.edu
684479Sbinkertn@umich.edu
694479Sbinkertn@umich.edu
704479Sbinkertn@umich.edu
714479Sbinkertn@umich.edu
724479Sbinkertn@umich.edu
734479Sbinkertn@umich.edu
744479Sbinkertn@umich.edu
75