Introducción al desarrollo de intérpretes y lenguajes de programación

1

Construcción de Intérpretes en Python desde Cero

2

Programación en Platzi: Compiladores e Intérpretes en Español

Construcción del lexer o tokenizador

3

Análisis Léxico: Creación de Tokens para Léxers

4

Tipos de Datos y Tokens en Python

5

Programación: Construcción de Lexer con Test-Driven Development

6

Pruebas Regulares en Python: Implementación de un Lexer

7

Tokens y Palabras Clave en Python: Gestión Avanzada

8

Tokens y Reconocimiento de Funciones en Lexers

9

Implementación de Operadores en Lexer de Platzi

10

Operadores Lógicos en Lenguajes de Programación

11

REPL en Python: Crear, Ejecutar y Probar Lexer Básico

Construcción del parser o analizador sintáctico

12

Construcción de un AST para Lenguaje Platzi

13

Creación de Nodos Abstractos para AST en Python

14

Parser de Lenguaje: Creación de Nodos AST en Python

15

Parseo de Let Statements en Lenguaje Platzi

16

Funciones de Tokenización en Lenguaje de Programación

17

Errores comunes al programar en Python

18

Base de Datos Relacional: Diseño y Consultas Básicas

19

Parsing con Pratt: Manejo de Precedencia y Asociatividad

20

Pruebas de AST para parsers en Python

21

Parseo de Expresiones con Pratt Parsing en Python

22

Parseo de Identificadores en AST Python

23

Parseo de Identificadores: Expresiones en PlatziLang

24

Parseo de Enteros en Python: Implementación y Pruebas

25

Operadores Prefijo en Parsers: Diseño e Implementación

26

Operadores InFix: Implementación y Pruebas en Python

27

Parseo de Operadores InFix en Python

28

Expresiones Booleanas en Lenguaje Platzi: Implementación y Testeo

29

"Precedencia de Operadores en Python"

30

Parentesis en Expresiones Matemáticas en Python

31

Tipos de Datos en el Lenguaje de Programación Platzi

32

Programación de Parsers en Lenguajes de Programación

33

Parsiendo Funciones en Lenguaje Platzi: Creación y Pruebas de Nodos AST

34

Programación Funcional: Construcción y Parsing en Python

35

Parentesis: Uso y Función en Llamadas a Procedimientos

36

Precedencia de Llamadas en Parsers: Implementación en AST

37

Parseo de Expresiones en LET y RETURN Statements

38

Construcción del REPL en Python: Lexer y Parser en Sintaxis Abstracta

Evaluación o análisis semántico

39

Análisis Semántico en Lenguajes de Programación

40

Evaluación de Código: Intérpretes vs Compiladores

41

Representación de Objetos en Python: Enteros, Booleanos y Null

42

Evaluación de enteros en Python: Crear y probar evaluador recursivo

43

Diseño de Patrones Singleton en Python

44

Semántica de Prefijos en Lenguajes de Programación

45

Evaluación de Expresiones Infix en Python

46

Condicionales en Lenguajes de Programación

47

Evaluación del Statement Return en Python

48

Manejo de Errores Semánticos en Lenguajes de Programación

49

Declaración de Variables y Ambientes en Lenguajes de Programación

50

Entornos y Cláusulas en Python: Manejo y Error Handling Avanzado

51

Declaración de Procedimientos en Lenguaje Platzi

52

Implementación y uso de closures en Platzi Programming

Mejora del intérprete

53

Implementación de strings en un intérprete Python

54

Operaciones en Strings: Concatenación y Comparación

55

Construcción de Funciones Built-in en Python

56

Función Longitud en Lenguaje Platzi

Siguientes pasos

57

Creación de Listas y Diccionarios en Python Avanzado

58

Construcción de intérpretes con Python desde cero

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Representación de Objetos en Python: Enteros, Booleanos y Null

41/58
Recursos

¿Qué es la representación de nodos de AST en un lenguaje de programación?

En el fascinante mundo de los lenguajes de programación, la representación de nodos de AST (Árbol de Sintaxis Abstracta) es vital para el análisis y ejecución de código. En este contexto, surge la necesidad de tomar decisiones importantes sobre cómo estructurar el sistema de objetos que respalda el lenguaje. Lenguajes como Java permiten el acceso a tipos primitivos, mientras que en Python o Dart, todo se accede a través de objetos. Estos enfoques reflejan diferentes prioridades, desde maximizar el rendimiento del hardware hasta mejorar la productividad de los programadores.

¿Por qué elegir un sistema u otro?

  • Acceso a primitivos vs. objetos: Lenguajes como Java ofrecen acceso a tipos primitivos para optimizar el rendimiento, mientras que Python prefiere trabajar completamente con objetos para mejorar la programabilidad.
  • Flexibilidad y simplicidad: Los lenguajes que ocultan detalles del hardware suelen proporcionar estructuras más simples y flexibles.
  • Eficiencia del programador: La productividad del programador puede superar la necesidad de rendimiento del código, favoreciendo lenguajes más sencillos y de alto nivel.

¿Cuáles son los tipos de objetos en nuestro lenguaje de programación?

Platzi, nuestro lenguaje de programación insigne para este análisis, manejará enteros, booleanos y nulos. No incluimos tipos flotantes en este curso, dejándolo como un ejercicio adicional para los programadores más curiosos. Esta personalización del sistema de valores es crucial para el desarrollo adecuado del lenguaje.

¿Cómo se implementa una jerarquía de objetos en Platzi?

La estructura de objetos en Platzi comienza con una clase abstracta de objetos, siguiendo por:

  • Enum para tipos de objeto: Aquí definimos los tipos de objeto esperados usando auto para no preocuparnos por los valores.

    from enum import Enum, auto
    
    class ObjectType(Enum):
        BOOLEAN = auto()
        INTEGER = auto()
        NULL = auto()
    
  • Interfaz de objetos: Cualquier objeto debe implementar dos métodos cruciales: type para identificar el tipo y inspect para comprobar el valor interno.

    from abc import ABC, abstractmethod
    
    class Object(ABC):
        @abstractmethod
        def type(self):
            pass
    
        @abstractmethod
        def inspect(self):
            pass
    
  • Classes específicas de objeto: Cada tipo de objeto, como enteros y booleanos, hereda de la clase abstracta y debe implementar los métodos requeridos.

    class Integer(Object):
        def __init__(self, value: int):
            self.value = value
    
        def type(self):
            return ObjectType.INTEGER
    
        def inspect(self):
            return str(self.value)
    

¿Qué es un Null en la programación y por qué es relevante?

El concepto de null se introdujo en ALGOL en 1965 y es comúnmente conocido como el "billion dollar mistake". Este objeto representa un valor inexistente o vacío y, aunque puede causar complicaciones en algunos programas, también ofrece flexibilidad y se considera estándar en la mayoría de los lenguajes de programación.

Implementación del objeto nulo en Platzi

El objeto nulo en Platzi es sencillo pero crucial para seguir las convenciones de los lenguajes de programación.

class Null(Object):
    def type(self):
        return ObjectType.NULL

    def inspect(self):
        return "null"

¿Cómo asegurar el correcto funcionamiento de los objetos?

Para garantizar que todo el código esté en orden y funcione correctamente, es esencial implementar pruebas continuas y chequeos sintácticos. Utilizar herramientas como unittest o mypy en Python es fundamental para verificar que las clases y métodos se comporten como se espera.

Implementar y mantener un sistema de objetos eficaz en un lenguaje de programación exige conocimientos tanto teóricos como prácticos, y constituye un paso esencial hacia la creación de tu propio lenguaje. ¡No dudes en explorar y expandir estas ideas en tus proyectos personales!

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Genial, aquí básicamente ya empezamos a escribir las representaciones de nuestros tipos pero ya como objetos, básicamente cuando veamos “verdadero” dentro del lenguaje de programación Platzi, sabremos que es un objeto que tiene un atributo value y que tiene una función type que está implementada internamente en el lenguaje de programación 😄
.
Siento que este object.py es como el ast.py pero para nuestro evaluador jajaja

No se porque siento que esta parte del evaluador será la más interesante dsfjjklsdaj.

Por cierto implementé los floats también en los objetos, ojala no me salte algún error por eso después dfa