Path: blob/main/third_party/ply/example/BASIC/basiclex.py
7087 views
# An implementation of Dartmouth BASIC (1964)12from ply import *34keywords = (5'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP',6'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW',7)89tokens = keywords + (10'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER',11'LPAREN','RPAREN','LT','LE','GT','GE','NE',12'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING',13'ID','NEWLINE'14)1516t_ignore = ' \t'1718def t_REM(t):19r'REM .*'20return t2122def t_ID(t):23r'[A-Z][A-Z0-9]*'24if t.value in keywords:25t.type = t.value26return t2728t_EQUALS = r'='29t_PLUS = r'\+'30t_MINUS = r'-'31t_TIMES = r'\*'32t_POWER = r'\^'33t_DIVIDE = r'/'34t_LPAREN = r'\('35t_RPAREN = r'\)'36t_LT = r'<'37t_LE = r'<='38t_GT = r'>'39t_GE = r'>='40t_NE = r'<>'41t_COMMA = r'\,'42t_SEMI = r';'43t_INTEGER = r'\d+'44t_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))'45t_STRING = r'\".*?\"'4647def t_NEWLINE(t):48r'\n'49t.lexer.lineno += 150return t5152def t_error(t):53print("Illegal character %s" % t.value[0])54t.lexer.skip(1)5556lex.lex(debug=0)5758596061626364656667686970717273747576