2010-09-23 10 views
9

Estoy tratando de implementar un lenguaje (o familia de idiomas) cuya gramática se puede cambiar dinámicamente. No he encontrado ejemplos que sirvan como casos de estudio.Uso de gramáticas adaptativas

¿Puede darme alguna referencia a las que se usan realmente en el mundo real (incluso del mundo académico)?

¿Tiene sentido implementar un lenguaje específico del dominio con una gramática dinámica?

+0

¿Quiere decir un lenguaje en el que puede definir nuevas estructuras de control sobre la marcha? Eso es un poco extraño. ¿Tiene un ejemplo del tipo de cosas que quiere hacer para las cuales cree que necesita este tipo de funcionalidad? – Welbog

+0

¿Ajustaría Lisp a su descripción? – Starkey

+0

Dado que todos los compiladores están compilados con herramientas (como Yacc y Lex y Bison), todos los lenguajes compilados son "adaptativos" según esta definición. Esta pregunta es demasiado vaga para responder. –

Respuesta

9

El idioma actual más famoso que tiene una sintaxis dinámica es Perl6. El ejemplo más famoso en general es probablemente Smalltalk-72.

También puede ser que desee ver en OMeta y el resto de la STEPS project de Alan Kay's Viewpoints Research Institute, así como Val de originales META II Schorre.

También es interesante: el π programming language.

XL (Extensible Language) también permite una poderosa manipulación de la sintaxis en sí.

+1

+1 para el idioma π, ¡genial! – yassin

+1

[EnglishScript] (https://github.com/pannous/spanish-script) también tiene una sintaxis dinámica, pero todavía es un trabajo en progreso. –

+0

Esta respuesta necesita alguna aclaración. ¿Por qué la sintaxis de Perl 6 se considera "dinámica"? –

8

El lenguaje de programación Katahdin ofrece sintaxis y cambios semánticos en el tiempo de ejecución. Es un lenguaje de tesis no compatible, así que no esperes usarlo en producción. Aún así, el número thesis de Chris Seaton puede ser un buen recurso para implementar ideas similares en su propio idioma.

Seaton se cita en this paper que describe un sistema de macro para el lenguaje de programación Fortress. El objetivo de los autores es hacer que la extensión sintáctica no se distinga de la sintaxis central.

+0

¡Cómo podría olvidarme de Katahdin! También hay uno relacionado, similar, cuyo nombre se me escapa en este momento. –

+1

+1 por citar a Katahdin – yassin

0

Me gusta mucho la sintaxis de Agda, que es extremadamente flexible. Permite operadores de disturbios arbitrarios que esencialmente permiten, lo que parecen nuevas características del lenguaje.

Aunque no he analizado detenidamente su trabajo, sé que Annika Aasa ha trabajado para permitir que los programadores especifiquen una nueva sintaxis. Encontrarás su trabajo en Google Scholar.

Fwiw, creo que desarrollar lenguajes específicos de dominio como una biblioteca en un lenguaje con una sintaxis muy flexible tiene mucho sentido. A veces se lo conoce como lenguaje de dominio específico, en caso de que no lo sepa.

0

Katahdin es una opción obvia. También hay PFront, y también hay buenas macros de análisis en Common Lisp.

+0

El enlace a PFront parece estar roto ahora. –

+0

@AndersonGreen, editado: un enlace a un artículo todavía funciona, no estoy seguro de dónde está el enlace de descarga ahora. –

0

Estoy trabajando en lo mismo.

Debería tener un par de bibliotecas de analizadores extensibles que las personas puedan usar pronto. Tengo el lexer listo y estoy ocupado preparando el analizador.

La primera biblioteca se está escribiendo en Ruby y pretendo traducirla a Java cuando esté lista. Primero probé una versión de Java, pero me empantané en detalles estúpidos, así que cambié a Ruby para que el lenguaje no se interponga en mi camino mientras todavía estoy pensando.

Estoy satisfecho con mi enfoque, que permite cambiar entre múltiples lexers y múltiples tipos de expresiones con operadores de distres. Los lexers son solo series ordenadas de expresiones regex.

El análisis sintáctico es una precedencia simple del operador fuera de las partes de destilación de las producciones y LL (1) dentro. Veremos si encuentro que quiero algo más fuerte.

Cuestiones relacionadas