Introducci贸n al desarrollo de int茅rpretes y lenguajes de programaci贸n

1

Aprende a desarrollar lenguajes de programaci贸n con int茅rpretes

2

Desarrolla LPP o Lenguaje de Programaci贸n Platzi

Construcci贸n del lexer o tokenizador

3

驴Qu茅 es an谩lisis l茅xico? Funcionamiento del lexer y tokens

4

Estructura y definici贸n de tokens en Python

5

Lectura de caracteres y tokens

6

Tokens ilegales, operadores de un solo car谩cter y delimitadores

7

Reconocimiento y diferenciaci贸n entre letras y n煤meros

8

Declaraci贸n y ejecuci贸n de funciones

9

Extensi贸n del lexer: condicionales, operaciones y booleanos

10

Operadores de dos caracteres

11

Primera versi贸n del REPL con tokens

Construcci贸n del parser o analizador sint谩ctico

12

驴Qu茅 es un parser y AST?

13

Estructura y definici贸n de nodos del AST en Python

14

Parseo del programa o nodo principal

15

Parseo de assignment statements

16

Parseo de let statements

17

Parseo de errores

18

Parseo del return statement

19

T茅cnicas de parsing y pratt parsing

20

Pruebas del AST

21

Implementaci贸n del pratt parser

22

Parseo de Identifiers: testing

23

Parseo de Identifiers: implementaci贸n

24

Parseo de enteros

25

Prefix operators: negaci贸n y negativos

26

Infix operators y orden de las operaciones: testing

27

Infix operators y orden de las operaciones: implementaci贸n

28

Parseo de booleanos

29

Desaf铆o: testing de infix operators y booleanos

30

Parseo de expresiones agrupadas

31

Parseo de condicionales: testing y AST

32

Parseo de condicionales: implementaci贸n

33

Parseo de declaraci贸n de funciones: testing

34

Parseo de declaraci贸n de funciones: AST e implementaci贸n

35

Parseo de llamadas a funciones: testing y AST

36

Parseo de llamadas a funciones: implementaci贸n

37

Completando los TODOs o pendientes del lexer

38

Segunda versi贸n del REPL con AST

Evaluaci贸n o an谩lisis sem谩ntico

39

Significado de s铆mbolos

40

Estrategias de evaluaci贸n para int茅rpretes de software

41

Representaci贸n de objetos

42

Evaluaci贸n de expresiones: enteros

43

Evaluaci贸n de expresiones: booleanos y nulos

44

Evaluaci贸n de expresiones: prefix

45

Evaluaci贸n de expresiones: infix

46

Evaluaci贸n de condicionales

47

Evaluaci贸n del return statement

48

Manejo de errores

49

Ambiente

50

Bindings

51

Evaluaci贸n de funciones

52

Llamadas a funciones

Mejora del int茅rprete

53

Implementaci贸n de strings

54

Operaciones con strings

55

Built-in functions: objeto y tests

56

Built-in functions: evaluaci贸n

Siguientes pasos

57

Retos para expandir tu int茅rprete

58

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

Evaluaci贸n de condicionales

46/58
Recursos

Aportes 3

Preguntas 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

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 馃