Ethgoin commited on
Commit
0179803
verified
1 Parent(s): f105117

Update parser.py

Browse files
Files changed (1) hide show
  1. parser.py +13 -9
parser.py CHANGED
@@ -3,9 +3,14 @@ from typing import List, Tuple, Any
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"}
@@ -88,13 +93,13 @@ class Parser:
88
  def function_call(self):
89
  func_name = self.current()[0]
90
  self.match(func_name)
91
-
92
  funciones_con_argumento = {
93
  "CALIBRATE", "COPY_FILE", "DELETE_FILE", "MOVE_BACKWARD", "MOVE_FORWARD", "MOVE_TO",
94
  "PRINT", "RENAME_FILE", "ROTATE", "SAVE_FILE", "SCAN", "SET", "SET_SPEED", "UPLOAD",
95
  "UPLOAD_FILE", "WAIT"
96
  }
97
-
98
  funciones_sin_argumento = {
99
  "ACTIVATE_ALARM", "ACTIVATE_SENSOR", "BREAK", "CHARGE_BATTERY", "CHECK_BATTERY",
100
  "CLOSE_DOOR", "CONTINUE", "DEACTIVATE_ALARM", "DEACTIVATE_SENSOR", "DECREASE_SPEED",
@@ -103,7 +108,7 @@ class Parser:
103
  "TURN_LEFT", "TURN_RIGHT", "TURN_UP", "UNLOCK", "LOG", "INIT", "LOCK", "LOW_BATTERY",
104
  "OPEN_DOOR", "PAUSE"
105
  }
106
-
107
  if func_name in funciones_con_argumento:
108
  if self.current()[0] != "OPEN_PAREN":
109
  raise SyntaxError(f"La funci贸n '{func_name}' requiere un argumento entre par茅ntesis.")
@@ -112,17 +117,16 @@ class Parser:
112
  self.match("CLOSE_PAREN")
113
  self.match("SEMICOLON")
114
  return {"type": "function", "name": func_name, "arg": arg}
115
-
116
  elif func_name in funciones_sin_argumento:
117
  if self.current()[0] == "OPEN_PAREN":
118
  raise SyntaxError(f"La funci贸n '{func_name}' no debe llevar argumentos ni par茅ntesis.")
119
  self.match("SEMICOLON")
120
  return {"type": "function", "name": func_name, "arg": None}
121
-
122
  else:
123
  raise SyntaxError(f"Funci贸n '{func_name}' no reconocida o mal definida.")
124
 
125
-
126
  def expression(self):
127
  left = self.term()
128
  while self.current()[0] in ("PLUS", "MINUS", "EQUAL", "NOT_EQUAL", "GREATER", "LESS", "AND", "OR"):
 
3
  Token = Tuple[str, str]
4
 
5
  FUNCTIONS = {
6
+ "ACTIVATE_ALARM", "ACTIVATE_SENSOR", "BREAK", "CHARGE_BATTERY", "CHECK_BATTERY",
7
+ "CLOSE_DOOR", "CONTINUE", "DEACTIVATE_ALARM", "DEACTIVATE_SENSOR", "DECREASE_SPEED",
8
+ "DOWNLOAD", "REBOOT", "READ_SENSOR", "RESET", "RESUME", "REVERSE", "SHUTDOWN",
9
+ "SHUT_OFF", "START", "STOP", "STOP_IMMEDIATELY", "TOGGLE_LIGHT", "TURN_DOWN",
10
+ "TURN_LEFT", "TURN_RIGHT", "TURN_UP", "UNLOCK", "LOG", "INIT", "LOCK", "LOW_BATTERY",
11
+ "OPEN_DOOR", "PAUSE", "CALIBRATE", "COPY_FILE", "DELETE_FILE", "MOVE_BACKWARD",
12
+ "MOVE_FORWARD", "MOVE_TO", "PRINT", "RENAME_FILE", "ROTATE", "SAVE_FILE", "SCAN",
13
+ "SET", "SET_SPEED", "UPLOAD", "UPLOAD_FILE", "WAIT"
14
  }
15
 
16
  TYPES = {"int", "float", "boolean"}
 
93
  def function_call(self):
94
  func_name = self.current()[0]
95
  self.match(func_name)
96
+
97
  funciones_con_argumento = {
98
  "CALIBRATE", "COPY_FILE", "DELETE_FILE", "MOVE_BACKWARD", "MOVE_FORWARD", "MOVE_TO",
99
  "PRINT", "RENAME_FILE", "ROTATE", "SAVE_FILE", "SCAN", "SET", "SET_SPEED", "UPLOAD",
100
  "UPLOAD_FILE", "WAIT"
101
  }
102
+
103
  funciones_sin_argumento = {
104
  "ACTIVATE_ALARM", "ACTIVATE_SENSOR", "BREAK", "CHARGE_BATTERY", "CHECK_BATTERY",
105
  "CLOSE_DOOR", "CONTINUE", "DEACTIVATE_ALARM", "DEACTIVATE_SENSOR", "DECREASE_SPEED",
 
108
  "TURN_LEFT", "TURN_RIGHT", "TURN_UP", "UNLOCK", "LOG", "INIT", "LOCK", "LOW_BATTERY",
109
  "OPEN_DOOR", "PAUSE"
110
  }
111
+
112
  if func_name in funciones_con_argumento:
113
  if self.current()[0] != "OPEN_PAREN":
114
  raise SyntaxError(f"La funci贸n '{func_name}' requiere un argumento entre par茅ntesis.")
 
117
  self.match("CLOSE_PAREN")
118
  self.match("SEMICOLON")
119
  return {"type": "function", "name": func_name, "arg": arg}
120
+
121
  elif func_name in funciones_sin_argumento:
122
  if self.current()[0] == "OPEN_PAREN":
123
  raise SyntaxError(f"La funci贸n '{func_name}' no debe llevar argumentos ni par茅ntesis.")
124
  self.match("SEMICOLON")
125
  return {"type": "function", "name": func_name, "arg": None}
126
+
127
  else:
128
  raise SyntaxError(f"Funci贸n '{func_name}' no reconocida o mal definida.")
129
 
 
130
  def expression(self):
131
  left = self.term()
132
  while self.current()[0] in ("PLUS", "MINUS", "EQUAL", "NOT_EQUAL", "GREATER", "LESS", "AND", "OR"):