forked from cvython/Vython
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathvython.py
More file actions
97 lines (83 loc) · 1.92 KB
/
vython.py
File metadata and controls
97 lines (83 loc) · 1.92 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
from Main.lexer import Lexer
from Main.parser import Parser
import sys
print("Vython - By Vedant K")
dico = {
'COMMENT': r'#.*',
'NEWLINE': r'\n+',
'STRING': r'(\"([^\\\n]|(\\.))*?\")|(\'([^\\\n]|(\\.))*?\')',
'BOOLEAN': r'(true)|(false)',
'FLOAT': r'-?\d+\.\d+',
'INTEGER': r'-?\d+',
'ELSEIF': r'(else if)|(elseif)',
'IF': r'if',
'OPEN_CRO': r'\{',
'CLOSE_CRO': r'\}',
'ELSE': r'else',
'LOOP': r'loop',
'WHILE': r'while',
'AND': r'(and)|(&&)',
'OR': r'(or)|(\|\|)',
'NOT': r'(not)|(!)',
'PRINT': r'show',
'EXIT': r'exit',
'ENTER': r'enter',
'INT': r'int',
'FLOATF': r'float',
'STR': r'str',
'TYPE': r'type',
'BOOL': r'boolean',
'CANBE': r'canbe',
'VIRGULE': r',',
'IS': r'\=\=',
'LESSE': r'\<\=',
'MOREE': r'\>\=',
'LESS': r'\<',
'MORE': r'\>',
'INCREMENT': r'\+\+',
'DECREMENT': r'\-\-',
'SUMAFF': r'\+\=',
'SUBAFF': r'\-\=',
'MULAFF': r'\*\=',
'DIVAFF': r'\/\=',
'DIVEUAFF': r'\/\/\=',
'MODAFF': r'\%\=',
'POWAFF': r'\^\=',
'SUM': r'\+',
'SUB': r'\-',
'MUL': r'\*',
'DIV': r'\/',
'DIVEU': r'\/\/',
'MOD': r'\%',
'POW': r'\^',
'EGAL': r'\=',
'IDENTIFIER': r"[a-zA-Z][a-zA-Z0-9]*",
'OPEN_PAREN': r'\(',
'CLOSE_PAREN': r'\)',
'CRO_OPEN': r'\[',
'CRO_CLOSE': r'\]',
'POINT': r'\.'
}
tokens = []
values = []
for k, v in dico.items():
tokens.append(k)
values.append(v)
lexer = Lexer(tokens, values).get_lexer()
pg = Parser(tokens)
pg.parse()
parser = pg.get_parser()
if len(sys.argv) >= 2:
try:
with open(sys.argv[1]) as f:
text_input = f.read()
tokens = lexer.lex(text_input)
parser.parse(tokens)
except IOError:
pass
else:
launched = True
while launched:
text_input = input(">>> ")
tokens = lexer.lex(text_input)
parser.parse(tokens)