Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
emscripten-core
GitHub Repository: emscripten-core/emscripten
Path: blob/main/third_party/ply/example/BASIC/basiclex.py
7087 views
1
# An implementation of Dartmouth BASIC (1964)
2
3
from ply import *
4
5
keywords = (
6
'LET','READ','DATA','PRINT','GOTO','IF','THEN','FOR','NEXT','TO','STEP',
7
'END','STOP','DEF','GOSUB','DIM','REM','RETURN','RUN','LIST','NEW',
8
)
9
10
tokens = keywords + (
11
'EQUALS','PLUS','MINUS','TIMES','DIVIDE','POWER',
12
'LPAREN','RPAREN','LT','LE','GT','GE','NE',
13
'COMMA','SEMI', 'INTEGER','FLOAT', 'STRING',
14
'ID','NEWLINE'
15
)
16
17
t_ignore = ' \t'
18
19
def t_REM(t):
20
r'REM .*'
21
return t
22
23
def t_ID(t):
24
r'[A-Z][A-Z0-9]*'
25
if t.value in keywords:
26
t.type = t.value
27
return t
28
29
t_EQUALS = r'='
30
t_PLUS = r'\+'
31
t_MINUS = r'-'
32
t_TIMES = r'\*'
33
t_POWER = r'\^'
34
t_DIVIDE = r'/'
35
t_LPAREN = r'\('
36
t_RPAREN = r'\)'
37
t_LT = r'<'
38
t_LE = r'<='
39
t_GT = r'>'
40
t_GE = r'>='
41
t_NE = r'<>'
42
t_COMMA = r'\,'
43
t_SEMI = r';'
44
t_INTEGER = r'\d+'
45
t_FLOAT = r'((\d*\.\d+)(E[\+-]?\d+)?|([1-9]\d*E[\+-]?\d+))'
46
t_STRING = r'\".*?\"'
47
48
def t_NEWLINE(t):
49
r'\n'
50
t.lexer.lineno += 1
51
return t
52
53
def t_error(t):
54
print("Illegal character %s" % t.value[0])
55
t.lexer.skip(1)
56
57
lex.lex(debug=0)
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76