Tengo experiencia en las frases del compilador y me interesan los Lenguajes de programación & Campo de compiladores y espero que alguien me explique cuál es el mejor enfoque para escribir un nuevo compilador desde cero para un nuevo lenguaje de programación. (me refiero a PASOS).¿Cuál es el mejor enfoque para construir un nuevo compilador?
Respuesta
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.
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.
Depende de lo que quieras hacer. Si realmente quieres saber cómo funciona todo desde cero, GCC es una forma muy confusa. –
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/
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.
- 1. ¿Cuál es el mejor enfoque para construir un cliente de iPhone para una aplicación de rieles?
- 2. ¿Cuál es el mejor enfoque para la compilación incremental al construir un DSL usando Eclipse?
- 3. Carga lenta: ¿cuál es el mejor enfoque?
- 4. Sort ObservableCollection: ¿cuál es el mejor enfoque?
- 5. ¿Cuál es el mejor enfoque para imprimir/informar desde WPF?
- 6. ¿Cuál es el mejor enfoque para diseñar aplicaciones GWT?
- 7. ¿Cuál es el mejor enfoque para usar JasperReports?
- 8. ¿Cuál es el mejor enfoque para la orientación geográfica?
- 9. ¿Cuál es el enfoque correcto para iniciar una aplicación GWT?
- 10. ¿Cuál es el mejor enfoque para escribir un instalador genérico para una aplicación Linux?
- 11. Rangos en Java, ¿cuál es el mejor enfoque?
- 12. ¿Cuál es el mejor enfoque para migrar un CGI a un Framework?
- 13. Mejor enfoque para el cliente WCF
- 14. ¿Cuál es un buen enfoque para estudiar OpenGL es 2.0?
- 15. ¿Cuál es la mejor forma de crear un software que no requiera el glibc más nuevo?
- 16. ¿Cuál es el mejor compilador de c para el Pic18 micro
- 17. Newbie quiere crear un lector de PDF para ipod touch: ¿cuál es el mejor enfoque?
- 18. ¿Cuál es el mejor enfoque para deshabilitar un botón de envío (del lado del cliente)?
- 19. ¿Cuál es el mejor enfoque para producir un PDF de alta calidad a partir de XML?
- 20. ¿Cuál es el mejor enfoque para el almacenamiento en caché de imágenes asíncronas en el iPhone?
- 21. ¿Cuál es el mejor enfoque para modificar campos de formularios PDF interactivos en iOS?
- 22. ¿Cuál es el mejor enfoque para usar OpenGL en la web?
- 23. ¿Cuál es el mejor enfoque para depurar la aplicaciónDidReceiveMemoryWarning en iPhone?
- 24. ¿Cuál es el mejor enfoque para manejar excepciones en el servicio WCF?
- 25. ¿Cuál es el mejor enfoque para usar SOLR con proyectos web?
- 26. ¿Cuál es el más utilizado? RSS o Atom? y de cuál es mejor construir?
- 27. ¿Cuál es el mejor editor para AutoHotkey?
- 28. Cuál es el mejor enfoque para monitorear el rendimiento del sitio en rieles
- 29. ¿Cuál es la mejor opción para construir un sistema de complemento para una aplicación Moose?
- 30. ¿Cuál es el mejor método para configurar un nuevo proyecto .NET?
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
"Modern Compiler Implementation" (Appel) está muy mal escrito y "Engineering a Compiler" (Cooper) no es muy adecuado para principiantes. –
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