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

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Parseo de assignment statements

15/58
Recursos

Aportes 7

Preguntas 0

Ordenar por:

Los aportes, preguntas y respuestas son vitales para aprender en comunidad. Reg铆strate o inicia sesi贸n para participar.

Vale, tratar茅 de explicar con mis propias palabras este c贸digo para ver si entend铆 bien 馃
.
Como dije en un aporte anterior, parse_program es el que se encargar谩 de empezar a crear nuestro AST, primero crear谩 el nodo principal (el programa) que b谩sicamente es un wrapper de todos nuestros staments, b谩sicamente un statement es cada acci贸n de nuestro programa, por ejemplo, el conjunto de palabras que declaran una variable: variable platzi = 10; eso ser铆a un statement.
.
Despu茅s de inicializar el programa, parse_program empezar谩 a buscar los diferentes tokens (recordemos que aqu铆 ya hablamos de tokens porque el Lexer que hicimos ya nos est谩 dando los tokens de nuestro programa)
.
La condici贸n de: while self._current_token.token_type != TokenType.EOF lo 煤nico que est谩 diciendo es que mientras a煤n hayan tokens, se va a mandar a generar un statement. B谩sicamente sabemos que el token que finaliza nuestro programa es el EOF (End Of File).
.
Ahora, hablando de la generaci贸n de statements dentro de la funci贸n parse_statement鈥 en primera, dentro de nuestro programa podemos tener varios tipos de statements (aunque seg煤n el profesor, dentro de LPP solo habr谩n dos), un ejemplo de ellos son los let statements (o statements de declaraci贸n de variables para que se entienda), es por eso que verificamos que si el token actual es LET significa que el usuario quiere declarar una variable, as铆 que tenemos que empezar a verificar que la sintaxis de declaraci贸n sea correcta, pero esa tarea se la delegamos a _parse_let_satatement.
.
Entonces, b谩sicamente _parse_let_satatement obtiene una instancia de la clase LetStatement (ubicada en ast.py) y empieza a validar, en teor铆a, la funci贸n _expected_token deber铆a determinar cu谩l es el siguiente token que arroj贸 el Lexer y comparar si el token arrojado es un IDENT (recordemos que el token IDENT define el nombre de la variable, en el statement variable platzi = 10;, platzi ser铆a el token IDENT).
.
En dado caso que el token no sea un IDENT significa que hay un error de sintaxis, por ahora devolvemos 鈥淣one鈥, esto provocar谩 que _parse_statement retorne None y a su vez, dentro de parse_program la variable statement que est谩 dentro del while acabar谩 siendo None, por lo que por la condici贸n que est谩 debajo no dejar谩 que este statement mal programado entre a la lista de statements de nuestro programa 馃槃
.
En dado caso que el expected token s铆 haya sido un IDENT, procederemos a crear una instancia de Identifier con este identificador, despu茅s seguimos revisando la sintaxis, despu茅s del identificador debe haber un 鈥=鈥, as铆 que comparamos que el siguiente token sea uno de asignaci贸n, si no lo es, misma historia, hay un error de sintaxis as铆 que retornamos None, si s铆 lo es, entonces continuamos revisando los tokens hasta que encontremos el 鈥;鈥
.
Ya que todo se termin贸 de revisar correctamente, se retorna el statement, lo que provocar谩 que _parse_statement retorne un statement provocando que dentro parse_program acabe retorn谩ndose un statement tambi茅n, y debido a que este s铆 es un statement de verdad, el if que est谩 ah铆 s铆 dejar谩 guardar ese statement dentro de nuestro Program 馃槃
.
As铆 es como entiendo que funciona este c贸digo, trat茅 de describirlo lo mejor posible xD

tio, no s茅 como sobrevives sin autocompletado馃椏

Implementaci贸n _parse_statement

Implementaci贸n _parse_let_statement

implementaci贸n de la clase Identifier

Implementaci贸n de la clase LetStatement

Implementaci贸n del test_let_statements