Cómo empezar a aprender compilando compiladores por primera vez.

Hola,

Primero, déjame intentar convencerte de que no construyas un compilador …

Esto será un gran desperdicio de su tiempo, lo hará sentir miserable y no servirá de nada para mejorar las habilidades que necesitará como programador, a menos que quiera ocupar puestos de trabajo y roles muy específicos. Si ha estado “jugando” durante 3 años, supongo que su futuro no está en el mundo ultra-hardcore del desarrollo del lenguaje de programación, el diseño de hardware o la informática profunda. Si realmente ha puesto sus esperanzas en cualquiera de estas cosas, salte la siguiente sección y diríjase al bit de “cómo hacer” al final.

Pero por ahora … esto solo te hará infeliz o loco, o ambos. Si quieres ser un buen desarrollador y ganar un montón de dinero en la construcción de aplicaciones, este es el mejor método …

  1. Obtenga información acerca de las bases de datos: el 99% de todas las aplicaciones comerciales dependen del acceso a la base de datos, y un buen 50% del rendimiento de la aplicación depende realmente de la base de datos en lugar del código C ++ de Hella-awesome (su código C ++ pasará la mayor parte de su vida esperando datos
  2. Aprenda sobre los seres humanos: el 99% de los problemas con las aplicaciones se deben al desarrollador que no entiende lo que el cliente quería, a menudo porque el cliente no estaba del todo seguro de lo que quería, o luchó por describirlo
  3. Aprender sobre metodologías de desarrollo – especialmente ágil. Trabajar en un proyecto casi siempre significa ser parte de un equipo, aprender sobre lo que significa desarrollarse conjuntamente, cumplir con los plazos, planificar su trabajo y participar en un grupo es una habilidad clave para aprender.

Escribir un compilador te ayudará con NINGUNA de estas cosas, así que, por favor, por el amor de todas las cosas buenas y puras, detén esta cosa “compilador” descabellada y concéntrate en adquirir habilidades que te sean útiles.

CÓMO…

Primero, realmente necesita dominar Assembler: el lenguaje ensamblador es prácticamente el “código de máquina” que los microprocesadores entienden. El trabajo de un compilador es tomar las instrucciones que ha escrito en el idioma que elija e incluirlas en Assembler. C es un lenguaje ostentoso para iniciar un viaje de compilación, ya que los enunciados en C se insertan muy naturalmente en las instrucciones de ensamblaje.

Pruebe primero con el ensamblador. Es posible que desee probar suerte con algunos procesadores muy simples. Consulte Microchip y la familia de procesadores PIC. Estos pequeños tienen una pequeña cantidad de instrucciones y serían un buen lugar para comenzar a aprender a escribir ensambladores.

Cuando realmente estés cambiando de forma cómoda con el ensamblador, consulta los libros que Mohammed Isam enumeró en su respuesta … si Crafting A Compiler: Charles N. Fischer, Ron K. Cytron, Richard J. LeBlanc Jr .: 9780136067054: Amazon.com: ¡Los libros no te asustan mucho, sino que te llenan las botas y te dan más poder!

Creo que tienes un muy mal consejo de la gente a la que preguntaste.

¿Qué es exactamente lo que sientes que falta? Porque escribir un compilador no es la forma de aprender un idioma (no para un principiante), y ciertamente no es un proyecto divertido.

Como sea, te conoces mejor que yo. Confío en que sepas lo que estás haciendo.

Tienes que decidir sobre dos cosas:

  • ¿Para qué idioma quieres escribir un compilador? C ++ sería una mala elección para empezar. Tal vez mirar a Pascal o C.
  • ¿En qué idioma vas a escribir el compilador? Si conoces C ++, ve con él.

Recomiendo esos excelentes recursos:

  • Este libro Crafting A Compiler: Charles N. Fischer, Ron K. Cytron, Richard J. LeBlanc Jr .: 9780136067054: Amazon.com: Los libros son de oro puro. La 3ª edición está escrita en Java, la 2ª edición en C ++ y la 1ª edición en C. Elija su elección.
  • El Libro del Dragón es una lectura obligada para los implementadores de compiladores. Consulte Compiladores: Principios, técnicas y herramientas (2ª edición): Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: 9780321486813: Amazon.com: Libros.
  • Si bien es muy antiguo y muy básico, Construyamos un compilador es un excelente trabajo de Jack Crenshaw. Puedes empezar por leerlo: Vamos a construir un compilador.
  • Si tiene acceso a cualquier código fuente de compilación existente (gcc, tincy cc, …), intente verlo y tener una idea de cómo se hacen las cosas.

¡Buena suerte!

Un compilador completo, a menos que esté dirigido a un lenguaje muy básico, es MUY DIFÍCIL de hacer como un proyecto para principiantes, pero hay tutoriales en línea que probablemente pueden ayudarlo.
Incluso un compilador para un lenguaje básico es bastante complicado de construir, pero puede darte una buena comprensión de C ++ en el camino …
Pero para mejorar su comprensión de C ++, comience por usar lo más posible de la biblioteca estándar y comprenda cómo se gestiona la memoria … agregue un poco de POO a eso, y tiene los conceptos básicos para comenzar a aumentar su conocimiento de C ++ … … bueno … incluso puede aprender mucho más sobre los mecanismos de administración de memoria de avance y luego ingresar a la metaprogramación para usos avanzados.

Hola,

Te sugiero 3 opciones:

  1. Escribe un compilador de hello-world desde cero usando algún libro de texto. Aquí hay un ejemplo de proyecto del curso en este EDX: Compiladores | Stanford en línea
  2. Escribe un backend a algún compilador existente. Tutorial para llvm como ejemplo: Tutorial: Creación de un backend LLVM para la arquitectura Cpu0
  3. Escriba una interfaz para algunos ejemplos de compiladores existentes para GCC: GCC pequeño