2010-08-04 12 views
5

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?

+3

Ouch. Buen truco de Adobe para obtener más de lo que (probablemente) pagaron. ;) ¿Sería "gnu-flex" una mejor etiqueta? – spender

+0

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

+0

Antlr es el camino a seguir, especialmente por el gui AntlrWorks que realmente ayuda a depurar la gramática y la sintaxis. – Mawg

Respuesta

6

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

+1 para "Más temprano que tarde" – Mawg

2

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.

Cuestiones relacionadas