26

Hace tiempo que quería jugar con la escritura de mi propio idioma (ostensiblemente para la experiencia de aprendizaje) y, como tal, tengo que basarme en la construcción de Parsers, Intérpretes y compiladores. Por lo tanto:Recursos de aprendizaje en analizadores, intérpretes y compiladores

  • ¿Alguien sabe de alguna buena recursos en la construcción de analizadores, intérpretes y compiladores?

EDIT: No estoy buscando compilador compiladores/parser-compiladores como Lex, Yacc y bisonte ...

+1

posible duplicado de [Aprender a Escribir un compilador] (http: // stackoverflow.com/questions/1669/learning-to-write-a-compiler) – nawfal

Respuesta

7

"libro de Dragón" de Aho es la referencia estándar, pero otra buena opción es Modern Compiler Implementation in Java (también disponible en ML y C sabores) de Andrew Appel. Lo guía paso a paso a través de cada uno de los componentes necesarios de un compilador/intérprete y proporciona una gran cantidad de código fuente útil.

+0

+1, los posee, buenos libros. –

1

RE: lex, yacc, bisontes

Qué quiere decir que no es necesario punteros a ellos o que no está interesado en el uso de ellos? No recomiendo escribir un lexer o analizador a mano.

EDITAR: Puede tener un sentido exagerado de lo que un "compilador compilador" puede lograr: la parte más difícil de la compilación comienza después de que haya creado el AST. Los libros Aho, Louden y Appel son todos bastante buenos.

+0

s/hard/hard y fun/g –

+0

[@Chris Conway] (http://stackoverflow.com/questions/41785/learning-resources-on-parsers-interpreters-and-compilers#41805) Desde una razón principal para estudiar este tema es aprender sobre él, estoy buscando construir algo así desde cero. Conozco bastantes compiladores de compiladores, etc. y es probable que investigue cómo se implementan, pero aparte de eso, quiero recursos que me ayuden a comprender mejor cómo funcionan los analizadores, los intérpretes y los compiladores, y cómo implementarlos. ellos. – akdom

7

Esta entrada de blog altamente entretenida por Steve Yegge (Rich Programmer Food) no le dirá todo lo que necesita saber acerca de cómo para construir un compilador (aunque sí incluye una buena cantidad de buena visión), pero lo hace un gran trabajo explicando por qué quiere entender cumplidores.

Diablos, esa publicación casi me hace comenzar a estudiar compiladores, y tengo un trabajo de tiempo completo, un niño de 3 años en casa y aproximadamente -1.5 horas gratis por día en promedio.

2

Recomiendo Compiler Design in C que desafortunadamente tiene que encontrar en un libro usado. El único problema real con el libro es que se escribió cuando la velocidad de compilación era un factor importante, por lo que el compilador está escrito en C. Es un lenguaje de bajo nivel que a veces la teoría de la implementación queda oculta bajo el código de implementación.

Mencionó tanto Intérpretes como Compiladores. De hecho, recomendaría comenzar con un intérprete en lugar de un compilador. Es mucho más fácil comenzar con un intérprete y tienden a ser más divertidos para trabajar porque puede obtener comentarios inmediatos sobre cómo lo está haciendo.

2

poco leí Programming Language Processors in Java y se lo recomendaría a usted, ya que se inicia con los conceptos básicos y luego te lleva a través de la implementación de un compilador descenso recursivo incluyendo la generación de código con un montón de discusión de los enfoques alternativos. Aunque no he leído los otros libros sugeridos en este hilo, por lo que no puedo ofrecer una comparación con ellos. No se deje intimidar por la parte de Java, si no conoce Java, ya que los conceptos y su implementación están lo suficientemente bien explicados como para obtener la esencia sin necesidad de una comprensión detallada de Java.

+0

Creo que este libro es mucho mejor que el libro de dragón para principiante. Muy recomendable. –

1

En caso de que:

  • está dispuesto a jugar
  • Al igual que la oportunidad de construir algo más rápido, y luego ir más profundo
  • están bien con el uso de .NET en una plataforma subyacente

... entonces le recomendaría que consulte el Dynamic Language Runtime de Microsoft, que se proporciona como código fuente dentro de todo el SDK de Dynamic Silverlight.

http://www.codeplex.com/sdlsdk

Algunas cosas buenas de él es que ofrece un montón de características listas para su uso como una consola, un sistema de tipo común, un árbol de sintaxis abstracta genérica, etc, y el paquete incluye tres implementaciones: Python, Ruby y Javascript.

tal vez es una buena oportunidad para poner en práctica una lengua corta otra el DLR, a continuación, empezar a comprobar el código DLR real, y luego empezar a construir las cosas básicas en su propio.

En cualquier caso, la mejor suerte de otro monstruo de la lengua!

3

El MIT OpenCourseWare (OCW) sitio tiene una clase cuyo proyecto es la construcción de un compilador ... que hacen referencia al libro del dragón y el libro de Appel, pero además, también hay notas de clase y conferencias disponibles. La clase es 6.035 - Computer Language Engineering.

me encontré con los apuntes de clase muy útil para explicar programas de análisis sintáctico descendente recursivo.

3

que he encontrado "Let's build a compiler" - el tutorial por Jack Crenshaw, muy fácil de seguir y entender. Jack construye un compilador para Pascal, desde cero, con explicaciones muy detalladas de cada paso.

0

Es un libro viejo, bastante anticuado, pero he encontrado Brinch Hansen en los compiladores de Pascal para ser una introducción muy práctica para crear un lenguaje y crear los elementos de un compilador. A pesar del nombre, no es específico de Pascal. Vale la pena si puedes encontrar una copia.

9

El mejor artículo que he leído en los compiladores es anticuado "META II un compilador de lenguaje de escritura orientada sintaxis" por Val Schorre. (http://doi.acm.org/10.1145/800257.808896)

En 10 páginas, que muestra cómo construir un asombrosamente simple pero muy eficaz compilador de computador, le proporcionará con la gramática compilador de computador y le proporciona suficientes detalles para que usted dé implementarlo en una tarde (con una asombrosa momento conceptual cuando se da cuenta de lo que recursivamente), y apenas para las muecas implementa un lenguaje ALGOL- similares. El papel es un gas completo y realmente debería ser necesario leer para cualquiera que trabaje con tecnología de compilación.

Aquí hay un enlace para jugar con un gran tutorial sobre metacompiling, basado en el papel. http://www.bayfronttechnologies.com/mc_tutorial.html

Cuestiones relacionadas