# An implementation of Dartmouth BASIC (1964) from ply import * keywords = ( 'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP', 'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW', ) tokens = keywords + ( 'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER', 'LPAREN','RPAREN','LT','LE','GT','GE','NE', 'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING', 'ID','NEWLINE' ) t_ignore = ' \t' def t_REM(t): r'REM .*' return t def t_ID(t): r'[A-Z][A-Z0-9]*' if t.value in keywords: t.type = t.value return t t_EQUALS = r'=' t_PLUS = r'\+' t_MINUS = r'-' t_TIMES = r'\*' t_POWER = r'\^' t_DIVIDE = r'/' t_LPAREN = r'\(' t_RPAREN = r'\)' t_LT = r'<' t_LE = r'<=' t_GT = r'>' t_GE = r'>=' t_NE = r'<>' t_COMMA = r'\,' t_SEMI = r';' t_INTEGER = r'\d+' t_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))' t_STRING = r'\".*?\"' def t_NEWLINE(t): r'\n' t.lexer.lineno += 1 return t def t_error(t): print("Illegal character %s" % t.value[0]) t.lexer.skip(1) lex.lex(debug=0)
Name | Type | Size | Permission | Actions |
---|---|---|---|---|
README | File | 2.45 KB | 0644 |
|
basic.py | File | 1.5 KB | 0644 |
|
basiclex.py | File | 1.15 KB | 0644 |
|
basiclog.py | File | 1.65 KB | 0644 |
|
basinterp.py | File | 16.88 KB | 0644 |
|
basparse.py | File | 8.69 KB | 0644 |
|
dim.bas | File | 224 B | 0644 |
|
func.bas | File | 73 B | 0644 |
|
gcd.bas | File | 359 B | 0644 |
|
gosub.bas | File | 216 B | 0644 |
|
hello.bas | File | 57 B | 0644 |
|
linear.bas | File | 420 B | 0644 |
|
maxsin.bas | File | 217 B | 0644 |
|
powers.bas | File | 268 B | 0644 |
|
rand.bas | File | 60 B | 0644 |
|
sales.bas | File | 375 B | 0644 |
|
sears.bas | File | 481 B | 0644 |
|
sqrt1.bas | File | 78 B | 0644 |
|
sqrt2.bas | File | 56 B | 0644 |
|