Spaces:
Sleeping
Sleeping
Update parser.py
Browse files
parser.py
CHANGED
@@ -2,13 +2,14 @@ from typing import List, Tuple, Any
|
|
2 |
|
3 |
Token = Tuple[str, str]
|
4 |
|
5 |
-
# Lista de funciones rob贸ticas v谩lidas
|
6 |
FUNCTIONS = {
|
7 |
"MOVE_FORWARD", "MOVE_BACKWARD", "ROTATE", "STOP", "WAIT", "TURN_LEFT",
|
8 |
"TURN_RIGHT", "TOGGLE_LIGHT", "CALIBRATE", "PRINT", "SET", "READ_SENSOR",
|
9 |
"ACTIVATE_SENSOR", "DEACTIVATE_SENSOR", "START", "REBOOT", "SHUTDOWN"
|
10 |
}
|
11 |
|
|
|
|
|
12 |
class Parser:
|
13 |
def __init__(self, tokens: List[Token]):
|
14 |
self.tokens = tokens
|
@@ -32,7 +33,9 @@ class Parser:
|
|
32 |
|
33 |
def instruction(self) -> Any:
|
34 |
token = self.current()
|
35 |
-
if token[0]
|
|
|
|
|
36 |
return self.if_statement()
|
37 |
elif token[0] == "WHILE":
|
38 |
return self.while_statement()
|
@@ -43,6 +46,12 @@ class Parser:
|
|
43 |
else:
|
44 |
raise SyntaxError(f"Instrucci贸n no v谩lida: {token}")
|
45 |
|
|
|
|
|
|
|
|
|
|
|
|
|
46 |
def assignment(self):
|
47 |
ident = self.match("IDENTIFIER")[1]
|
48 |
self.match("ASSIGN")
|
|
|
2 |
|
3 |
Token = Tuple[str, str]
|
4 |
|
|
|
5 |
FUNCTIONS = {
|
6 |
"MOVE_FORWARD", "MOVE_BACKWARD", "ROTATE", "STOP", "WAIT", "TURN_LEFT",
|
7 |
"TURN_RIGHT", "TOGGLE_LIGHT", "CALIBRATE", "PRINT", "SET", "READ_SENSOR",
|
8 |
"ACTIVATE_SENSOR", "DEACTIVATE_SENSOR", "START", "REBOOT", "SHUTDOWN"
|
9 |
}
|
10 |
|
11 |
+
TYPES = {"int", "float", "boolean"}
|
12 |
+
|
13 |
class Parser:
|
14 |
def __init__(self, tokens: List[Token]):
|
15 |
self.tokens = tokens
|
|
|
33 |
|
34 |
def instruction(self) -> Any:
|
35 |
token = self.current()
|
36 |
+
if token[0] in TYPES:
|
37 |
+
return self.declaration()
|
38 |
+
elif token[0] == "IF":
|
39 |
return self.if_statement()
|
40 |
elif token[0] == "WHILE":
|
41 |
return self.while_statement()
|
|
|
46 |
else:
|
47 |
raise SyntaxError(f"Instrucci贸n no v谩lida: {token}")
|
48 |
|
49 |
+
def declaration(self):
|
50 |
+
tipo = self.match(self.current()[0])[0]
|
51 |
+
nombre = self.match("IDENTIFIER")[1]
|
52 |
+
self.match("SEMICOLON")
|
53 |
+
return {"type": "declaration", "var": nombre, "datatype": tipo}
|
54 |
+
|
55 |
def assignment(self):
|
56 |
ident = self.match("IDENTIFIER")[1]
|
57 |
self.match("ASSIGN")
|