tipos sirven que programacion para lenguaje interpretes harbour ejemplos compiladores compilador comandos compiler-construction

compiler construction - sirven - Lenguaje de propósito general para compilar un compilador



manual de programacion en c (13)

Cualquiera que sea el idioma que elija, podría considerar compilar en un lenguaje intermedio (IL) para apuntar al Common Language Runtime (CLR). Supongo que apuntar a la Máquina Virtual Java (JVM) sería similar para aplicaciones que no son de Windows o, tal vez, CLR en Mono? Esto probablemente simularía mucho el trabajo y te permitiría tener algo que funcionara bien desde el principio. Más tarde volverá a orientar una arquitectura específica si quiere ir más allá.

Inspirado por la entrevista de Eric Sink en el podcast de stackoverflow, me gustaría construir un compilador completo en mi tiempo libre para la experiencia de aprendizaje. Mi primer pensamiento fue construir un compilador de C, pero no estoy seguro de si tomaría demasiado tiempo.

Me pregunto si hay un lenguaje de propósito general más pequeño que sería más apropiado implementar como un primer esfuerzo de compilación. ¿O es factible una implementación de C en un plazo razonable (200 horas)?

Es mi intención apuntar al CLR.


En términos de simplicidad, FORTH va a ser uno de los idiomas más fáciles de desarrollar. Es un hilo interpretativo en lugar de una compilación verdadera, pero aún tendrá que analizar el análisis, el almacenamiento variable, etc.

Para un compilador, iría con C o Pascal, los cuales son bastante compactos y tienen fuente para compiladores disponibles.



Escribe un compilador brainfuck o en adelante. BASIC es quizás también un lenguaje no muy rico en características. Creo que C sería moderadamente difícil. No envidies sobre el arco del objetivo. Usa lo que tengas

Si no desea implementar un ensamblador, coloque el código del ensamblado de salida del compilador y empújelo a gas o nasm.


Mi sugerencia es elegir tu idioma favorito. El conocimiento que tiene al respecto superará la dificultad de escribir un compilador para ello, por lo general.


No puedo pensar en ningún lenguaje que sea lo suficientemente simple como primer ejercicio de compilación de compiladores. No creo que intente con C para un primer corte. ¿Por qué no inventar tu propio idioma? Tal vez sea un verdadero éxito.


Si desea un tutorial compacto , ¿por qué no considerar Wirth''s Compiler Construction (pdf). El idioma de origen (Oberon-0) es lo suficientemente simple como para mantener el compilador comprensible. El lenguaje de implementación (Oberon) debe ser legible para cualquiera que haya realizado alguna programación.

En cuanto a qué lenguaje usar para implementar el compilador. Usa algo con lo que estés familiarizado. En caso de duda, elija un idioma que no complique innecesariamente el intento: algo con la recolección de basura. Algo que hace que sea fácil imprimir o volcar las estructuras internas de datos para su inspección. Python , Scheme y Lua vienen a la mente.

La consideración final es qué objetivo con su compilador. Las máquinas virtuales JVM y CLR han sido mencionadas, estoy seguro. Podrías ir por esa ruta. Puede ser más fácil, en un primer intento, usar un simulador para un procesador RISC reducido como su objetivo. (El compilador de Wirth hace esto).

No recomendaría apuntar a x86 para su primer compilador ya que es espantoso más allá de las palabras. Tampoco apuntaré a un lenguaje de nivel alto (er) como C porque perderá muchos detalles interesantes, como la implementación de semántica de cortocircuito para operadores booleanos y cosas por el estilo.


Ya se mencionó a Pascal, pero me gustaría añadir que el libro Algorithms + Data Structures = Programs de Niklaus Wirth contiene una implementación completa de un pequeño lenguaje similar a Pascal utilizando un descenso recursivo. Si está buscando una discusión teórica sobre el análisis sintáctico, busque en otra parte; pero si quiere un código sencillo que le permita aprender haciendo, le recomiendo A + DP = P.


Otro punto a favor de Scheme: es práctico para un principiante escribir un compilador autónomo para él, como Ur-Scheme de Kragen Sitaker, su primer compilador. Hay pocos otros compiladores "tutoriales" lo suficientemente potentes para compilarse (aunque hay algunos indicadores en el enlace). Esto trae más realismo e interés al problema.


Cualquiera que sea el idioma que elija, recuerde que puede definir su propio conjunto de funciones admitidas para personalizarlo y adaptarlo a sus objetivos de aprendizaje. Si quieres aprender sobre los compiladores (lo que suena como si lo hicieras), entonces podrías escribir un compilador de C, pero solo soltar soporte para alguna característica aleatoria, como punteros, por ejemplo, o solo implementar un subconjunto de las palabras clave, solo para hacerlo más manejable.

Por supuesto, si su objetivo es intimidar realmente con un idioma en particular, querrá implementar completamente un compilador para ese idioma.


Serás más feliz escribiendo compiladores para idiomas más antiguos y más pequeños. Pascal , por ejemplo, se diseñaron como herramientas de aprendizaje. El lenguaje de Pascal es pequeño y elegante; el compilador se puede escribir de manera bastante simple.

Incluso un compilador Oberon o Modula-2 es similar en complejidad a Pascal; su diseño fue conducido por la misma persona, Niklaus Wirth.

Los lenguajes como C, que evolucionaron orgánicamente, están demasiado llenos de caprichos para ser buenas experiencias de aprendizaje.


En un curso de compilación, escribimos compiladores para un subconjunto de C (me gustaba pensar que era C--). No fue tan difícil ya que sabías dónde estaban tus límites. Siempre puede refactorizar y agregar más funciones más adelante.


Yo recomendaría escribir un compilador de brainf ** k. Es muy simple y bueno para un primer compilador. Y la escala de tiempo sería más como de 1 hora y media. Algunos otros buenos lenguajes son Forth, Logo y Lisp.