2009-10-12 14 views

Respuesta

9

El primer paso es leer Dragon Book.

Ofrece una buena introducción a todo el campo de la construcción de compiladores, pero también entra en suficiente detalle para construir uno propio.

En cuanto a los siguientes pasos, sugiero seguir los capítulos del libro. No está escrito como un tutorial, pero ofrece muchos consejos prácticos, lo que lo convierte en un centro ideal para sus propias ideas e investigaciones.

+2

Por favor chicos, deberían * realmente * dejar de citar el librito del dragón ... Es uno de los peores libros de compilación que hay. Puedes citar Appel's, Cooper, etc. Pero * por favor * no el Libro del Dragón. – tonfa

+1

"Modern Compiler Implementation" (Appel) está muy mal escrito y "Engineering a Compiler" (Cooper) no es muy adecuado para principiantes. –

+0

No puede ser peor que el Libro del Dragón arcano. Personalmente, no he encontrado el Libro de Tigre mal escrito, aunque nunca lo he leído de principio a fin, he descubierto que tiene muchas ideas muy buenas. – tonfa

3

Me gustaría integrar tu langauge/interfaz con el framework compilador GNU.

De esta forma, usted (¡SOLO!) Necesita escribir el analizador y el traductor en el formato de objeto portátil de gcc. Obtiene el optimizador, la generación de código objeto para el chip de elección, el enlazador, etc. de forma gratuita.

Otra alternativa sería apuntar a una Java JVM, la máquina virtual está bien documentada y el conjunto de instrucciones de JVM es mucho más estable que el código de máquina x86.

+1

Depende de lo que quieras hacer. Si realmente quieres saber cómo funciona todo desde cero, GCC es una forma muy confusa. –

5

Por favor, no use el Libro del Dragón, es viejo y en su mayoría obsoleto (y utiliza nombres raros para la mayoría de las cosas).

Para libros, recomiendo Apple's Tiger Book, o Cooper's Engineering un compilador. Me gustaría sugerir fuertemente que utilizar un marco como llvm para que no tenga que volver a aplicar un montón de cosas para la generación de código, etc.

Aquí está el tutorial para la construcción de su lenguaje con el llvm: http://llvm.org/docs/tutorial/

2

Logré escribir un compilador sin ningún libro en particular (aunque había leído algunos libros de compilación en el pasado, pero no en ningún detalle real).

Lo primero que debe hacer es jugar con cualquiera de las herramientas de tipo "compilador compilador" (flex, bison, antlr, javacc) y hacer funcionar su gramática. Las gramáticas son en su mayoría sencillas, pero siempre hay partes esenciales que se interponen en el camino y arruinan todo. Especialmente cosas como expresiones, precedencia, etc.

Algunos de los lenguajes más antiguos son más simples por alguna razón. Hace que los analizadores "solo funcionen". Considere una variante de Pascal que puede procesarse únicamente a través de un recursivo decente.

Menciono esto porque sin su gramática, no tiene ningún idioma. Si no puedes analizarlo y leerlo correctamente, no llegarás a ninguna parte muy rápido. Y ver una docena de líneas de código de muestra en su nuevo idioma se convierte en una gran cantidad de tokens y nodos de sintaxis es realmente sorprendente. De una manera "wow, realmente funciona". Literalmente es casi como "todo funciona" o "nada funciona", especialmente al principio. Una vez que realmente funciona, sientes que realmente puedes lograrlo.

Y hasta cierto punto eso es cierto, porque una vez que terminas esa parte, tienes que hacer funcionar tu tiempo de ejecución fundamental. Una vez que obtenga "a = 1 + 1" compilado, la mayor parte del nuevo trabajo estará detrás de usted y ahora solo necesita implementar el resto de los operadores.Básicamente se convierte en un ejercicio de administración de tablas de búsqueda y referencias, y tener alguna idea de dónde se encuentra en un momento dado en el proceso.

Puede ejecutar por su cuenta con una nueva sintaxis, tiempo de ejecución innovador, etc. Pero si tiene tiempo, probablemente sea mejor hacer un lenguaje que ya se ha hecho, solo para comprender e implementar todos los pasos , y piense si estaba escribiendo el idioma que realmente quiere, cómo haría lo que está haciendo con este existente de manera diferente.

Hay una gran cantidad de mecanismos para la escritura del compilador y simplemente hacer el proceso con éxito una vez le dará mucha más confianza cuando quiera volver y hacerlo nuevamente con su propio y nuevo lenguaje.

Cuestiones relacionadas