Ethgoin commited on
Commit
26b5c29
verified
1 Parent(s): cb531a0

Update parser.py

Browse files
Files changed (1) hide show
  1. parser.py +11 -2
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] == "IF":
 
 
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")