Por si les quedan dudas acerca del Walrus Operator, les dejo este video que lo explica muy bien:
.
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
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Aportes 2
Preguntas 0
Por si les quedan dudas acerca del Walrus Operator, les dejo este video que lo explica muy bien:
.
si quieren cumplir con el don’t repeat your self pueden escribir el codigo asi:
def _parse_call_arguments(self) -> Optional[List[Expression]]:
arguments: List[Expression] = []
assert self._peek_token is not None
if self._peek_token.token_type == TokenType.RPAREN:
self._advance_tokens()
return arguments
self._advance_tokens()
while True:
if expression := self._parse_expression(Precedence.LOWEST):
arguments.append(expression)
if self._peek_token.token_type == TokenType.COMMA:
self._advance_tokens()
self._advance_tokens()
else:
break
if not self._expected_token(TokenType.RPAREN):
return None
return arguments
Básicamente es cambiar el while por un do-while, pero como en python no existe ese tipo de while pues se tiene que hacer un pequeño truco con el While True: y un break si no se cumple la condición final de la iteracion
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?