forked from sconetto/lispf_ck
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlispf_ck.py
52 lines (40 loc) · 1.21 KB
/
lispf_ck.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import ox
import click
@click.command()
@click.argument('lispf_ck',type=click.File('r'))
def ast_lispf_fc(lispf_ck):
lexer = ox.make_lexer([
('NUMBER', r'\d+(\.\d*)?'),
('LPAR', r'\('),
('RPAR', r'\)'),
('DEF_FUNC', r'def'),
('EXEC_BLOCK', r'do'),
('LOOP', r'loop'),
('PRINT', r'print'),
('READ', r'read'),
('DEC', r'dec'),
('INC', r'inc'),
('LEFT', r'left'),
('RIGHT', r'right'),
('DO_BEFORE', r'do\-before'),
('DO_AFTER', r'do\-after'),
('ADD', r'add'),
('SUB', r'sub'),
('COMMENT', r'\;([^\n\r]+)'),
('NAME', r'[a-zA-z]+\d*'),
])
token_list = ['NUMBER', 'LPAR', 'RPAR', 'DEF_FUNC', 'EXEC_BLOCK', 'LOOP',
'PRINT', 'READ', 'DEC', 'INC', 'LEFT', 'RIGHT', 'DO_BEFORE',
'DO_AFTER', 'ADD', 'SUB', 'COMMENT', 'NAME']
parser = ox.make_parser ([
], token_list)
source = lispf_ck.read()
lisp_entry = []
for data in source:
lisp_entry.append(data)
tokens = lexer(lisp_entry)
print('Tokens:\n', tokens)
ast = parser(tokens)
print('AST:\n', ast)
if __name__ == "__main__":
run = ast_lispf_fc()