parsing - sintactico - ¿hay un compilador simple para un lenguaje pequeño?
compilador en javascript (18)
Estoy buscando un compilador simple que compila un lenguaje simple, lo necesito para escribir un artículo sobre él y para aprender cómo funcionan los compiladores, no estoy buscando algo sofisticado sino solo un lenguaje simple (por simple me refiero a un código pequeño porque por ejemplo, gcc es demasiado grande). cualquier ayuda es apreciada
Deberías leer un libro sobre el diseño del compilador; debe tener la teoría que desea conocer, así como algunos ejemplos apropiadamente simples.
Recomiendo "el libro del dragón": Principios del diseño del compilador , por Aho y Ullman. Han pasado muchos años desde que lo leí, así que no recuerdo exactamente qué ejemplos están disponibles, pero es un texto muy bueno.
Depende de su punto de vista de simple. Podrías mirar uno de los variouse compiladores BrainFuck disponibles. Es un lenguaje extremadamente simple y los compiladores son muy pequeños. Pero no sé cuánto te dirá sobre cómo funciona un compilador "real".
¿Qué hay de mirar un pequeño compilador de C? C no está muy compilado y creo que esto te dará una idea de la construcción del compilador.
El compilador práctico más pequeño que conozco es MetaII , que tiene una autodescripción de 40 líneas y puede compilarse, utilizando un sistema de tiempo de ejecución especial que esconde algunos cálculos interesantes (pero entonces, la mayoría de los compiladores enumerados aquí asumen algún tipo de sistema de tiempo de ejecución, seguramente más grande que el de MetaII. He creado compiladores reales que comienzan con esto como base, aunque meta-auto-mejorado de forma espectacular.
Ha habido trabajo para hacer eso aún más pequeño. No creo que haya compiladores prácticos basados en esta dirección.
Vale la pena escribir un artículo sobre esto.
El recurso estándar de desbordamiento de pila para recursos en la escritura del compilador es Aprender a escribir un compilador
Empecé un video tutorial sobre cómo escribir un compilador ANTLR 3.x - check out
http://javadude.com/articles/antlr3xtut
¡Voy a agregar más a esto pronto! - Scott
En mi antigua escuela de TI, tuvimos que desarrollar un compilador en C ++, pero no desde cero: había pasos, curvas de aprendizaje, etc.
El concepto del compilador TIGER y las asignaciones de proyectos
Todos los documentos están disponibles, pero el código en sí no está disponible, por lo que tendrá que hacerlo todo usted mismo.
Hay una gran cantidad de información comprensible y utilizable, podría ser un buen comienzo para aprender a codificar un compilador.
Esta solo tiene 300 líneas de código normal e implementa un texto de enlace de lenguaje universal simple, ¿es algo así como lo que estaba buscando?
Google UCSD Pascal . Fue un innovador en los años 70. Tal vez es más de lo que quieres, pero en ese entonces era fácilmente portado a una gran cantidad de chips "micro".
Hay muchas cosas que puede usar, lo que encontrará más fácil dependerá de su experiencia.
En primer lugar en lo que respecta al idioma:
- El más simple es un lenguaje de juguete, por ejemplo compilando expresiones aritméticas.
- El siguiente es un ensamblador, una vez más solo traduciendo, pero muestra los conceptos básicos de análisis y conversión en códigos de operación
- El siguiente es probablemente algo como C, que está muy cerca del ensamblador puro, o algo así como LISP, que está muy cerca de la teoría pura.
Luego, selecciona tu compilador.
Puede comenzar con un ensamblador, convirtiendo el ensamblador en código de máquina. Este fue el primer paso en la producción de compiladores. Sugeriría un chip como el 6502 o el 8080, que son muy sencillos. Algo como el kit de desarrollo del ensamblador podría funcionar bien para ti (viene con ejemplos)
Mucha gente (incluyéndome a mí) podría argumentar que los lenguajes más sencillos para escribir compiladores son funcionales; hoy en día eso probablemente signifique Haskell, Scheme o Common Lisp. Un ejemplo de lo fácil que es esta publicación de blog . Escribe un compilador que solo compila expresiones aritméticas en pocas líneas. Esto podría ser lo suficientemente mínimo para ti.
Casi todas las introducciones para escribir compiladores en el nivel académico comienzan con un lenguaje mínimo como ejemplo, el Dragon Book http://en.wikipedia.org/wiki/Dragon_Book_%28computer_science%29 siempre se recomienda, pero hay otros buenos.
En la Universidad usé C-- que es como C pero aún más fácil para escribir un compilador. Muchos recursos en: http://www.cminusminus.org/qc--.html
Si quiere un compilador y conoce un lenguaje como Java, le sugiero algo como JavaCC , donde el lenguaje se especifica mediante gramáticas. Aquí hay muchas gramáticas de ejemplo ; elige algo simple como C para comenzar.
Jack Crenshaw, un Ph.D. quien ha escrito extensamente sobre métodos numéricos prácticos, tenía miedo de los compiladores desde hace mucho tiempo. Finalmente se cansó de tener miedo y escribió un tutorial de varias partes sobre construcción de compiladores, basado en lo que aprendió mientras se enseñaba a sí mismo sobre el tema.
Consulte "Desarrollemos un compilador" para obtener más información. Tenga en cuenta que no está completo; se le acabó el vapor antes de terminarlo, pero hay mucha información fácilmente digerible allí.
LISPes (Scheme, etc.) son los idiomas reales más simples. Puede buscar cómo construir un intérprete de esquema primitivo en perl con este libro (versión en papel aquí en Lulu ). El análisis de tipos es similar en intérpretes y compiladores. Luego, aquí hay un libro más hardcore sobre el tema de diseño del compilador (también disponible como árbol muerto en Lulu ).
Mire el compilador simple para PL / 0 (un pequeño subconjunto tipo pascal - sin parámetros, solo datos enteros). La fuente, escrita en Pascal, tiene solo 500 líneas de código y es fácil de seguir. Esto puede ser todo lo que necesita mirar.
Sin embargo, si quieres ir un poco más lejos, una vez que te sientas cómodo con eso, mira la fuente de Pascal-S. Este es un compilador para un subconjunto más grande de Pascal, pero incluye algunos conceptos adicionales, como el paso de parámetros, tipos de datos adicionales y matrices y registros (estructuras). Aún así, solo hay unas 2000 líneas de código, y es fácil de seguir una vez que haya dominado PL / 0.
Puedes encontrar las fuentes aquí:
Puede ver el ejemplo de la Calculadora en el hilarante libro de Bjarne Stroustrup "El lenguaje de programación C ++".
Si quieres algo más avanzado, lee el código fuente de boost :: spirit.
Recomiendo TinyScheme o jonesforth .
Si quieres ver el código, estoy muy impresionado con el compilador MinCaml Eijiro Sumii.
Solo tiene 2000 líneas de largo.
Compila un lenguaje fuente bastante interesante.
Genera código de máquina real, nada de esto de namby-pamby C o LLVM :-)
La velocidad del código compilado es competitiva con gcc y los compiladores OCaml nativos.
El compilador está diseñado para la enseñanza.
¿He mencionado que he quedado muy impresionado?
También puedes probar este libro: Los Elementos de los Sistemas de Computación .
Aunque un libro que intenta abarcar desde el diseño de un microprocesador hasta un lenguaje con su compilador, puede centrarse en los capítulos correspondientes.
Capítulo 10: El análisis de sintaxis es lo que puede trabajar, si tiene la intención de enfocarse solo en la parte frontal del compilador. Sin embargo, el capítulo 9 debe ser un requisito previo ya que describe el diseño de un lenguaje de alto nivel para el cual se implementa un compilador. Este lenguaje de alto nivel es en realidad un lenguaje OO Java simple, por lo tanto, el compilador realmente compila en una VM.
La mejor parte de todo esto es que en realidad podría seguir las instrucciones e implementar la parte frontal en el idioma de su elección, si cree que eso facilitará su comprensión. Se gelia bastante bien si se combina con la teoría del compilador.
Y, puedes encontrar mi reseña del libro aquí .
Brainfucked es un compilador para el lenguaje extremadamente simple Brainfuck .
Cerca de 1000 líneas de código. Compila el esquema con el ensamblador LLVM o con C. Diría que es una excelente opción para un documento sobre compiladores. Si quieres profundizar, te recomiendo el libro "SICP" .