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