Recursos de aprendizaje sobre analizadores, intérpretes y comstackdores

Hace tiempo que quería jugar con la escritura de mi propio idioma (aparentemente para la experiencia de aprendizaje) y, como tal, necesito estar relativamente cimentado en la construcción de Parsers, Intérpretes y Comstackdores. Asi que:

  • ¿Alguien sabe de algún buen recurso para construir Parsers, Intérpretes y Comstackdores?

EDITAR: no estoy buscando comstackdores comstackdores / comstackdores de analizadores como Lex, Yacc y Bison …

El mejor artículo que he leído sobre comstackdores data de 1964, “META II, un lenguaje de escritura de comstackdor orientado a la syntax” de Val Schorre. ( http://doi.acm.org/10.1145/800257.808896 )

En 10 páginas, le muestra cómo crear un comstackdor-comstackdor asombrosamente simple pero muy efectivo, le proporciona la gramática comstackdor-comstackdor y le proporciona los detalles suficientes para implementarlo a mano en una tarde (con un momento conceptual sorprendente) cuando te das cuenta de cómo recurses), y solo por sonrisas implementa un lenguaje tipo ALGOL. El documento es un gas completo y realmente debería ser una lectura obligatoria para cualquiera que trabaje con tecnología de comstackción.

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

El “Libro del dragón” de Aho es la referencia estándar, pero otra buena opción es la Implementación del comstackdor moderno de Andrew Appel en Java (también disponible en los sabores ML y C ). Lo guía paso a paso a través de cada uno de los componentes necesarios de un comstackdor / intérprete y proporciona una gran cantidad de código fuente útil.

Esta entrada de blog altamente entretenida de Steve Yegge ( Rich Programmer Food ) no le dirá todo lo que necesita saber acerca de cómo comstackr un comstackdor (aunque sí incluye una buena cantidad de buena información), pero hace un gran trabajo de explicando por qué quieres entender a los cumplidores

Diablos, ese post casi me hizo comenzar a estudiar comstackdores, 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.

No es muy fácil, pero exhaustivo: el libro de dragones

Construcción del comstackdor: Principios y práctica es el mejor libro sobre el tema.

El sitio MIT OpenCourseWare (OCW) tiene una clase cuyo proyecto es construir un complier … se refieren al libro del Dragón y al libro de Appel, pero además, también hay notas de clase y conferencias disponibles. La clase es 6.035 – Ingeniería de lenguaje informático .

Las notas de clase me parecieron muy útiles para explicar los analizadores sintácticos de descenso recursivo.

He encontrado “Construyamos un comstackdor” : el tutorial de Jack Crenshaw, muy fácil de seguir y entender. Jack construye un comstackdor para Pascal, desde cero, con explicaciones muy detalladas de cada paso.

Recomiendo el diseño de comstackdor en C que, desgraciadamente, debería encontrar en un sitio de libro usado. El único problema real con el libro es que se escribió cuando la velocidad de comstackción era un factor importante, por lo que el comstackdor 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.

Mencionaste tanto intérpretes como comstackdores. De hecho, recomendaría comenzar con un intérprete en lugar de un comstackdor. 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.

Recientemente leí Procesadores de lenguaje de progtwigción en Java y se lo recomendaría a usted, ya que comienza con conceptos básicos y luego lo guiará a través de la implementación de un comstackdor de descendencia recursiva que incluye generación de código con abundante discusión de 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.

RE: lex, yacc, bisonte

¿Quiere decir que no necesita punteros para ellos o que no está interesado en usarlos? No recomiendo escribir un lexer o analizador a mano.

EDITAR: Puede tener un sentido exagerado de lo que puede lograr un “comstackdor comstackdor”: la parte realmente difícil de la comstackción comienza después de que haya creado el AST. Los libros Aho, Louden y Appel son todos bastante buenos.

Por si acaso:

  • Están dispuestos a jugar
  • Al igual que la posibilidad de construir algo más rápido, entonces profundiza
  • Están de acuerdo con el uso de .NET en una plataforma subyacente

… entonces le recomendaría que compruebe 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 esto es que proporciona muchas características listas para usar como una consola, un sistema de tipo común, un árbol de syntax abstracto genérico, etc. Y el paquete incluye tres implementaciones: Python, Ruby y Javascript.

Tal vez sea una buena oportunidad para implementar un lenguaje corto, otro tipo de DLR, luego comience a verificar el código DLR real y luego comience a desarrollar las cosas básicas por su cuenta.

En cualquier caso, ¡mejor suerte de otro fanático de la lengua!

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