tipos partes ejecutar compilar compiladores compilador como c++ c compiler-construction compiler-optimization

c++ - ejecutar - partes de un compilador



¿Cómo funcionan los compiladores C/C++? (10)

Comience con el libro del dragón ... (enfatice más sobre la optimización del código y la generación de código)

Vaya a escribir un compilador de juguetes para un lenguaje de programación educativo como Decaf o Cool .., puede usar generadores de analizadores (lex y yacc) para su interfaz (para hacer la vida más fácil y centrarse en más cosas imp) ....

A continuación, lea el libro interno de gcc junto con la exploración del código fuente de gcc.

Después de más de una década de codificación C / C ++, he notado el siguiente patrón: muy buenos programadores tienden a tener un conocimiento detallado de las entrañas del compilador.

Soy un programador razonablemente bueno, y tengo una colección ad-hoc de "supersticiones" de compilador, así que me gustaría reiniciar mi conocimiento y comenzar desde lo básico.

¿Alguien puede recomendar enlaces a recursos en línea o libros favoritos? Estoy particularmente interesado en la compilación C / C ++, la optimización, GCC y LLVM.


Dependiendo de lo que exactamente quieras saber, deberías echar un vistazo a las tuberías y al patrón de filtro, porque hasta donde sé esto (o algo similar) se usa en muchos compiladores en los últimos años.

Cuando el conocimiento de mi compilador no está demasiado desactualizado, funciona así:

Parse código fuente en representación simbólica

Limpiar la representación simbólica, hacer algo de normalización

Optimización del árbol simbólico basado en ciertas reglas

escribir código ejecutable basado en árbol simbólico

Por supuesto, las dependencias, etc. deben ser resueltas también.

Y, por supuesto, echarle un vistazo al código fuente gcc o javac puede ayudar a obtener una comprensión más detallada.


El texto del compilador es bueno, pero son un poco pesados ​​para enseñarse a sí mismo. Jack Crenshaw tiene un "Libro" que fue una serie de artículos que puede descargar y leer llamada "Permite construir un compilador". Sigue la metodología de "Aprender haciendo" que es excelente si no sacaste nada de tomar clases formales sobre el tema, o ha pasado mucho tiempo desde que lo tomé (ese es mi caso). Te detiene y te guiará por escribir un compilador en lugar de golpearte con Lambda Calculus y profundos problemas teóricos que solo le interesan a la academia. Era una buena manera de remover esas células cerebrales que solo tenían un recuerdo borroso de escribir algo en el Vax (¡sí, un VAX!) Hace muchas lunas en la escuela. Está escrito muy conversacionalmente y es fácil simplemente sentarse y leer, a diferencia de la mayoría de los libros de texto que requieren varias tazas de café solo para pasar el primer capítulo. Una vez que tiene una base para la comprensión, entonces el texto más tradicional, como el libro del Dragón, son excelentes referencias para ampliar su comprensión. (Y personal, me gustan las versiones de Dead Tree, imprimí las de Jack, es mucho más fácil leerlas en una posición cómoda que en una computadora portátil. Y los lectores Ebook son demasiado caros para algo que en realidad no parece que estés leyendo una libro real todavía).

Lo que algunos podrían llamar un "inconveniente" es que está escrito en Pascal, pero pensé que eso me hizo pensar en ello más que si alguien me hubiera dado un programa C en funcionamiento para empezar. Aparte de eso, se escribió con el 68000 en mente, que solo se está utilizando en sistemas integrados en este momento. De nuevo, para mí, esto no fue un problema, sabía que 68000 asm y 68000 asm son más fáciles de leer que algunos otros asm.



También puede ser útil recoger y leer el código fuente de un compilador. Dudo que GCC sea la mejor primera opción, ya que está cargado con compatibilidad total con más de 20 años de evolución del lenguaje. Pero también estoy seguro de que una lectura de su fuente, guiada por uno de los manuales de referencia internos, sería educativa.

Consideraría seriamente buscar en la fuente un lenguaje de scripting que se compila internamente a un bytecode para una máquina virtual. Varios idiomas se ajustan a esa descripción, pero comenzaría con Lua . El lenguaje es pequeño y la VM es nueva. El código fuente también es pequeño y los bits que he visto han sido muy claros aunque ligeramente comentados.


echa un vistazo a Kaleidoscope . Puede escribir su propio compilador en solo unos días con LLVM.




Como señaló Pete Eddy, el tutorial de Jack Crenshaw es excelente para los novatos. Pero si quiere ver cómo funciona un compilador de C real, uno diseñado por ingenieros brillantes en lugar de creado arrojando código en la pared hasta que algo se atasque, obtenga una copia de Fraser y Hanson''s A Retargetable C Compiler: Design e Implementación , que contiene el código fuente del compilador lcc muy limpio. Las explicaciones del diseño y la implementación se mezclan con el código. No es el primer libro para un principiante, pero reparará cuidadosamente el estudio, y puede obtener una copia usada por $ 35.

Para una propaganda más larga sobre lcc , vea Compilar C más rápido en Linux .

La página web de lcc también tiene enlaces a una cantidad de buenos libros de texto. Sin embargo, no sé de un texto introductorio que realmente me guste.

PD. Lo siento por haber sido estafado en Uni.