Estoy escribiendo un lenguaje de plantilla de texto simple para una aplicación web que estoy escribiendo (piense en la plantilla de google). Cuando haya terminado, contará con solo un pequeño número de acciones posibles, cosas simples como "evaluar y ejecutar", "evaluar e imprimir", "evaluar y escapar de html", "comentar". Estaba pensando en escribir todo el analizador desde cero, pero comencé a buscar generadores de analizadores sintácticos como Lex, Flex y Antlr. Estos parecen mucho más de lo que necesito para mi sintaxis simple. Entonces la pregunta es, ¿en qué punto es práctico usar un generador de analizador sintáctico?¿Cuándo es práctico usar un generador de analizador sintáctico?
Respuesta
Más pronto que tarde. Si tiene una sintaxis simple ahora, usar un generador de analizadores es fácil. Lo hace aún más fácil cuando desea agregar variables y bucles y condicionales.
¡Pero espera! - Hay pocas razones para inventar su propio idioma a menos que sea específica de dominio muy parecido eqn
o TeX
o moleculares lenguajes de modelado. Es mucho mejor que incorpores un lenguaje diseñado específicamente para ese propósito. Tcl es la vieja guardia en ese reino, con Python siendo un fuerte contendiente. Perl también fue diseñado para ser un lenguaje de scripting incorporado, pero creo que es un candidato pobre, ya que es probable que genere un código muy "de solo escritura" en manos de sus usuarios.
diseño del lenguaje es duro y fumar todos los bits complicados cabo es aún más difícil. Con Python y Tcl, puede decidir qué parte del lenguaje central exponer a sus usuarios y abrir bits cerrados a medida que los necesite.
El primer lenguaje poco que escribí (que sorprendentemente se encuentra todavía en uso en producción) habría sido mucho mejor Tcl habían estado allí para usar en su lugar.
+1 para "Más temprano que tarde" – Mawg
Por un lado, si no tiene experiencia con una de estas herramientas y tiene tiempo, quizás esta sea una buena oportunidad para aprender una para este caso de uso. Me imagino que si tuviera experiencia en estas herramientas, simplemente las usaría, al igual que muchos toman una expresión regular para muchas tareas de análisis sintáctico.
Por otro lado, analizadores simples no son tan difícil de hacer, ni siquiera son tan difíciles de mantener. Me gusta escribirlas, y normalmente las busco cuando la tarea necesita una en lugar de una herramienta (pero no estoy muy familiarizado con las herramientas). En muchos casos, prefiero un analizador simple sobre expresiones regulares, dependiendo de la tarea.
- 1. Cuándo usar el generador de analizador, ¿cuándo es suficiente la expresión regular?
- 2. ¿Cuándo debería usar un analizador?
- 3. Haskell - Analizador sintáctico de descenso recursivo
- 4. ¿Cuándo debería usar el generador de interfaz?
- 5. Generador unparser/analizador combinado
- 6. En busca del analizador sintáctico Delivered NMEA
- 7. ¿Qué es un buen compilador compilador de C#/generador de analizador?
- 8. Bison - parámetro adicional a un analizador sintáctico y puro
- 9. Recursos en línea para escribir un analizador generador
- 10. Generador del analizador de expresiones regulares
- 11. Java. Analizador de Sax. ¿Cómo romper el análisis sintáctico manualmente?
- 12. ¿Cuál es el BNF para una expresión regular (para escribir un analizador sintáctico completo o parcial)
- 13. python: ¿cuándo puedo descomprimir un generador?
- 14. python: ¿hay un analizador XML implementado como generador?
- 15. ¿Qué herramientas de analizador sintáctico basadas en gramática existen para ruby?
- 16. ¿Cuándo es apropiado usar IoC?
- 17. ¿Cuándo es bueno usar FTP?
- 18. ¿Cuándo es apropiado usar CacheItemRemovedCallback?
- 19. Implementando el analizador sintáctico para un lenguaje similar al de las rebajas
- 20. ¿Qué es un árbol sintáctico abstracto/¿Es necesario?
- 21. ¿Cuándo es aceptable usar jQuery?
- 22. ¿Cuándo es apropiado usar couchDB?
- 23. ¿Cuándo es sensato usar Thread.Sleep()?
- 24. "Token esperado" usando el generador de analizador de limón
- 25. Analizador de Haskell para AST
- 26. CSS + analizador generador de XHTML, el asesoramiento necesario
- 27. Cuándo usar OSGi EventAdmin y cuándo no?
- 28. Cuándo usar un módulo y cuándo usar una clase
- 29. escribiendo un analizador rápido en python
- 30. ¿Qué generador de analizador para enseñar a mis alumnos?
Ouch. Buen truco de Adobe para obtener más de lo que (probablemente) pagaron. ;) ¿Sería "gnu-flex" una mejor etiqueta? – spender
libro [Patrones implementación del lenguaje] del programador pragmático (http://pragprog.com/titles/tpdsl/language-implementation-patterns) tiene un excelente primer capítulo de discutir los diferentes puntos fuertes '' de programas de análisis para diferentes idiomas. – sarnold
Antlr es el camino a seguir, especialmente por el gui AntlrWorks que realmente ayuda a depurar la gramática y la sintaxis. – Mawg