Lo que veo en este caso es que nuestros If no soportar m煤ltiples condiciones ni tenemos el token And y Or en nuestro lenguaje. Me he puesto a pensar como hacerlo pero todav铆a no lo he implementado.
Introducci贸n al desarrollo de int茅rpretes y lenguajes de programaci贸n
Aprende a desarrollar lenguajes de programaci贸n con int茅rpretes
Desarrolla LPP o Lenguaje de Programaci贸n Platzi
Construcci贸n del lexer o tokenizador
驴Qu茅 es an谩lisis l茅xico? Funcionamiento del lexer y tokens
Estructura y definici贸n de tokens en Python
Lectura de caracteres y tokens
Tokens ilegales, operadores de un solo car谩cter y delimitadores
Reconocimiento y diferenciaci贸n entre letras y n煤meros
Declaraci贸n y ejecuci贸n de funciones
Extensi贸n del lexer: condicionales, operaciones y booleanos
Operadores de dos caracteres
Primera versi贸n del REPL con tokens
Construcci贸n del parser o analizador sint谩ctico
驴Qu茅 es un parser y AST?
Estructura y definici贸n de nodos del AST en Python
Parseo del programa o nodo principal
Parseo de assignment statements
Parseo de let statements
Parseo de errores
Parseo del return statement
T茅cnicas de parsing y pratt parsing
Pruebas del AST
Implementaci贸n del pratt parser
Parseo de Identifiers: testing
Parseo de Identifiers: implementaci贸n
Parseo de enteros
Prefix operators: negaci贸n y negativos
Infix operators y orden de las operaciones: testing
Infix operators y orden de las operaciones: implementaci贸n
Parseo de booleanos
Desaf铆o: testing de infix operators y booleanos
Parseo de expresiones agrupadas
Parseo de condicionales: testing y AST
Parseo de condicionales: implementaci贸n
Parseo de declaraci贸n de funciones: testing
Parseo de declaraci贸n de funciones: AST e implementaci贸n
Parseo de llamadas a funciones: testing y AST
Parseo de llamadas a funciones: implementaci贸n
Completando los TODOs o pendientes del lexer
Segunda versi贸n del REPL con AST
Evaluaci贸n o an谩lisis sem谩ntico
Significado de s铆mbolos
Estrategias de evaluaci贸n para int茅rpretes de software
Representaci贸n de objetos
Evaluaci贸n de expresiones: enteros
Evaluaci贸n de expresiones: booleanos y nulos
Evaluaci贸n de expresiones: prefix
Evaluaci贸n de expresiones: infix
Evaluaci贸n de condicionales
Evaluaci贸n del return statement
Manejo de errores
Ambiente
Bindings
Evaluaci贸n de funciones
Llamadas a funciones
Mejora del int茅rprete
Implementaci贸n de strings
Operaciones con strings
Built-in functions: objeto y tests
Built-in functions: evaluaci贸n
Siguientes pasos
Retos para expandir tu int茅rprete
Contin煤a con el Curso de Creaci贸n de Compiladores de Software
A煤n no tienes acceso a esta clase
Crea una cuenta y contin煤a viendo este curso
Aportes 3
Preguntas 0
Lo que veo en este caso es que nuestros If no soportar m煤ltiples condiciones ni tenemos el token And y Or en nuestro lenguaje. Me he puesto a pensar como hacerlo pero todav铆a no lo he implementado.
##Una optimizaci贸n de c贸digo.
En este punto, podemos cambiar nuestra funci贸n _evaluate_bang_operator_expression
para que simplemente devuelva lo contrario de _is_truthy
.
.
En mi caso qued贸 as铆:
def _evaluate_bang_operator_expression(right: Object) -> Object:
return FALSE if _is_truthy(right) else TRUE
.
De esta forma, as铆, si en alg煤n momento decidimos cambiar la forma en que se qu茅 es verdadero y qu茅 es falso, no tendremos que cambiarlo en ambos lugares. Remember the principle: Don鈥檛 repeat your self.
Me encanta que podemos empezar a ponernos creativos con esto jaja
.
.
Por cierto, me di cuenta que en este pedazo de c贸digo:
def _evaluate_statements(statements: List[ast.Statement]) -> Optional[Object]:
result: Optional[Object] = None
for statement in statements:
result = evaluate(statement)
return result
No importa cu谩ntos statements pasemos, solamente vamos a tomar el valor del 煤ltimo, porque a cada rato se est谩 sobreescribiendo el valor de result
, as铆 que actualmente el LPP no puede ejecutar m谩s de un statement 馃
驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.