por favor necesito algunos recursos para comenzar (soy un estudiante de cs)¿Cuál es el mejor lenguaje de programación para escribir analizadores y compiladores?
Respuesta
La respuesta puede ser muy subjetiva aquí. Pero recomendaría usar ANTLR si desea escribir un analizador. Actualmente ANTLR admite C, C#, ActionScript, JavaScript y objetivos de Java. Desde mi experiencia, la versión de Java es realmente estable de usar y se ha utilizado en muchos proyectos de código abierto de gran alcance: Drools y Hibernate.
Lisp/Scheme fue lo que se nos encargó con el uso de nuevo en la universidad.
Se prestaron bastante bien a la tarea.
Dan
Mientras que una vez tuve un libro de texto titulado 'aplicación compilador moderno en Java' Creo que los profesionales siguen utilizando C. Aparte de demostrar que su lengua puede compilarse a sí mismo.
Estaba a punto de sugerir Flex y Bison también. :-) –
Los generadores de analizadores no eliminan la necesidad de un lenguaje de programación. Generan un analizador en un idioma particular. El lenguaje tradicional Flex/Bison (LEX/YACC) es C. – Brannon
@ Branon +1 para su comentario; todavía necesitas un lenguaje de programación. Sin embargo, me gustaría añadir que Flex/Bison o Lex/Yacc son bastante obsoletos. Si usó algo como Coco/R y va a Lex/Yacc, se encontrará desesperado por características, entre las que destacan lookaheads mayores de uno. – Imagist
¿Desea escribir un analizador para un lenguaje de propósito general? En este caso, se recomienda claramente la escritura (y el arranque) en el idioma de destino. Deberías comer tu propia comida para perros.
Yo diría que "recomendado en muchos casos", no "claramente recomendado". El "lenguaje de propósito general" es un nombre inapropiado, ya que no hay ningún lenguaje apropiado para * todas * tareas. No escribiría una aplicación web en C y no escribiría un sistema operativo en Python. No es que no puedas hacer ninguna de estas cosas; es simplemente que no sería apropiado hacerlo. Si acepta esta lógica, entonces tiene sentido que uno escriba un lenguaje de propósito general que no sea apropiado para el análisis sintáctico y, por lo tanto, no debería usarse para analizarse a sí mismo. – Imagist
He aquí un buen ejemplo: el intérprete JavaScript * completo * del proyecto STEPS es solo 170 líneas de código fuente OMeta, y una persona tardó una tarde en escribir. En el intérprete JavaScript de Narcissus, el analizador * solo * tiene más de 1000 líneas de JavaScript, con otras 1000 líneas para el visitante AST. Entonces, usar JavaScript para implementar JavaScript es 10 veces más detallado que usar OMeta. –
Pero eliminas una gran cantidad de errores, si realmente usas tu analizador/compilador. Y realmente lo usa al implementarlo en este idioma. – Mnementh
Si implementa un compilador desde cero, la mayoría de los lenguajes de programación están a la altura de la tarea. (Incluso sé de compiladores/analizadores escritos en Fortran IV y COBOL, aunque no recomendaría intentarlo!)
Pero si el lenguaje que intentas implementar tiene incluso una gramática no trivial, lo harías es mejor usar un generador lexer y/o un generador de analizador para implementar el front-end. Obtendrás un analizador mucho más rápido y confiable.
Por lo tanto, sobre esa base, los lenguajes de programación adecuados para los que un generador de analizador decente está disponible. Hay una página en Wikipedia que compara una gran cantidad de generadores de analizadores sintácticos. ¡No me di cuenta de que había tantos!
Si su objetivo es aprender las técnicas detrás de analizadores sintácticos (y tokenizadores), tal vez es mejor escribir uno usted mismo desde cero. Puede hacer esto en la mayoría de los lenguajes de programación, para que pueda elegir uno con el que se sienta cómodo.
Hace un tiempo, escribí una serie de publicaciones en el blog que muestran lo fácil que es escribir un analizador para un lenguaje de programación ficticio similar al BASIC, en C#. No quiero enviar correo no deseado aquí, así que no proporcionaré un enlace directo, pero si visitas el blog (mira mi perfil) y vas al final, puedes encontrar un enlace "Escribir un analizador" en "mis publicaciones "-sección.
Querrá ver los generadores de analizadores sintácticos. Si eres un estudiante de CS, probablemente quieras echarle un vistazo al Libro del Dragón: http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques,_and_Tools.
Probablemente sería más fácil construir un analizador utilizando C# o Java, ya que no tendrá que preocuparse por cosas como la gestión de memoria, etc. y puede centrarse en la gramática.
Un buen generador de analizadores C# es GPPG: http://plas.fit.qut.edu.au/gppg/.
¿Alguien puede explicar por qué esto ha sido degradado? El Dragon Book es un excelente recurso, y C#/java pasa a seguir la palabra de la pregunta. Aunque creo que la pregunta en sí es estúpida. – gimpf
Los analizadores y compiladores son dos problemas separados. Por ejemplo, podría escribir un compilador en C, pero nunca escribiría un analizador en C (usaría un generador de analizador).Para analizadores muy simples en los que la velocidad no es una prioridad alta, podría codificar manualmente el analizador en Perl o Python, que tienen buenas funciones de manipulación de texto. Pero para algo más allá de un analizador muy básico, usaría algún tipo de herramientas de generación de analizadores. Los más comúnmente utilizados son ANTLR, Coco/R y Lex/Yacc y la implementación de GNU Flex/Bison. Mi preferencia personal es Coco/R, pero ANTLR parece ser más popular en estos días.
Si está escribiendo un lenguaje de programación de propósito general, es posible que desee considerar escribirlo en sí mismo. Hay muchos beneficios en esto, incluida la portabilidad (las personas solo tienen que portar la primera versión del lenguaje) y la demostración de capacidades (el análisis es un problema difícil, por lo que si se puede hacer en su idioma, eso es un testimonio de su idioma). Si se interpreta su idioma, puede que esto no sea apropiado por motivos de rendimiento.
- 1. ¿cuál es el mejor lenguaje de programación para el selenio?
- 2. ¿Cuál es el mejor lenguaje de programación para escribir un bot web?
- 3. ¿Cuál es el mejor lenguaje para el reconocimiento de huella?
- 4. ¿cuál es el mejor lenguaje de programación para el procesamiento de video?
- 5. ¿Cuál es el mejor enfoque para construir un nuevo compilador?
- 6. ¿Cuál es el mejor lenguaje para el modelado de física?
- 7. ¿Cuál es el propósito del lenguaje de programación Scala?
- 8. ¿Cuál es el mejor lenguaje de script para Unity3D
- 9. ¿Los compiladores de producción usan generadores de analizadores?
- 10. ¿Fuente de analizadores para lenguajes de programación?
- 11. ¿Cuál es el mejor lenguaje para raspar pantallas?
- 12. Mejor lenguaje de programación para el procesamiento de imágenes médicas
- 13. Recursos de aprendizaje en analizadores, intérpretes y compiladores
- 14. ¿El mejor lenguaje de programación para la enseñanza de econometría?
- 15. ¿Cuál es el lenguaje de programación más conciso?
- 16. ¿Cuál es el mejor editor para AutoHotkey?
- 17. ¿Cuál es el lenguaje de programación funcional más mínimo?
- 18. ¿Cuál es el mejor idioma para escribir un sistema experto?
- 19. ¿Cuál es el mejor lenguaje de programación para operacionalizar preguntas de investigación con grandes conjuntos de datos?
- 20. ¿Cuál es la mejor contraparte de ANTLR para crear analizadores en ruby?
- 21. Cuál es el mejor recurso para aprender Lenguaje ensamblador para el microcontrolador PIC
- 22. Mejores prácticas para escribir un analizador de lenguaje de programación
- 23. Lenguaje de programación y compilador
- 24. ¿Cómo harías para escribir un lenguaje de programación simple?
- 25. ¿Cuál es el mejor analizador de XML para Perl?
- 26. ¿Cuál es el estado actual de LOGO? (El lenguaje de programación)
- 27. ¿Cuál es el lenguaje de los compiladores? Están escritos con diferentes idiomas?
- 28. ¿Cuál es el mejor lenguaje/marco web para usar con una API REST y JSON?
- 29. Cuál es la mejor práctica para escribir bookmarklets
- 30. UML para el lenguaje de programación C
Dupe of http://stackoverflow.com/questions/1669/learning-to-write-a-compiler entre muchos, muchos otros –
Si se trata de una solicitud abierta de recursos, Neil tiene razón. Si está pidiendo comparar y contrastar, entonces bordea "subjetivo y argumentativo" – dmckee
Vea [what-is-the-best-language-to-write-a-compiler-in] (http://stackoverflow.com/ questions/809710/what-is-the-best-language-to-write-a-compiler-in) – nawfal