¿Dónde están todas las opciones gramaticales en Antlr3?

En Antlr2 había numerosas opciones gramaticales que se podían configurar (referencia). Ahora en Antlr3 tenemos como 1/3 de la cantidad de opciones (referencia).

Entonces tengo dos preguntas sobre esto:

  1. ¿Alguien sabe por qué se eliminaron tantas opciones y volverá alguna de ellas?
  2. ¿Antlr3 tiene la capacidad de hacer lo que podría hacer Antlr2, incluso sin todas esas opciones?

Para ser más específico en mi segunda pregunta, quiero poder hacer algunas cosas. Primero, quiero cambiar la visibilidad de las clases de analizador y lexer generadas (es decir, la opción "classHeaderPrefix" de Antlr2).

En segundo lugar, quiero poder ignorar cualquier token de espacio en blanco que se encuentre dentro de ciertas palabras clave, como tener "& palabra clave &" y "& k ey palabra &" coinciden (es decir, la opción Antlr2 "ignorar", ¿creo?).

Finalmente, quiero que ciertas palabras clave no distingan entre mayúsculas y minúsculas (es decir, la opción Antlr2 "caseSensitive").

preguntado el 09 de enero de 11 a las 03:01

1 Respuestas

BluePlateSpecial escribió:

Para ser más específico en mi segunda pregunta, quiero poder hacer algunas cosas. Primero, quiero cambiar la visibilidad de las clases de analizador y lexer generadas (es decir, la opción "classHeaderPrefix" de Antlr2).

En v3 no hay forma de hacer esto.

BluePlateSpecial escribió:

En segundo lugar, quiero poder ignorar cualquier token de espacio en blanco que se encuentre dentro de ciertas palabras clave, como tener "& palabra clave &" y "& k ey palabra &" coinciden (es decir, la opción Antlr2 "ignorar", ¿creo?).

Es posible que esas opciones se hayan eliminado porque el algoritmo LL (*) en el lexer es mucho más poderoso que el que se usó en v2. Ahora, no hay necesidad de tal opción ya que esto funcionaría:

FOO
  :  '&' (' ' | 'a'..'z')+ '&'
  ;

BluePlateSpecial escribió:

Finalmente, quiero que ciertas palabras clave no distingan entre mayúsculas y minúsculas (es decir, la opción Antlr2 "caseSensitive").

Eso tampoco es posible en v3 aparte de hacerlo de la manera "difícil":

BAR
  :  ('b' | 'B') ('a' | 'A') ('r' | 'R')
  ;

Respondido el 09 de enero de 11 a las 12:01

Gracias por la respuesta. Siento que han dado un paso hacia adelante y un paso hacia atrás con v3. Personalmente, siento que una nueva versión debería poder hacer todo lo que la anterior podía hacer y más y, en cambio, en realidad nos limitan. Especialmente con la omisión de la opción caseSensitive, ¿cómo se podría construir un analizador para un lenguaje como VB donde todas las palabras clave no distinguen entre mayúsculas y minúsculas? A menos que estas opciones regresen, tendré que considerar seriamente volver a la v2. ¿Alguna idea de por qué se eliminaron o si volverán? Y gracias por la edición, mi pregunta se ve mucho mejor ahora :) - BluePlateEspecial

@BluePlateSpecial, no, no estoy seguro de por qué classHeaderPrefix y caseSensitive fueron descartados en v3. Yo también los he echado de menos en varias ocasiones. Pero no volvería a la v2 para estas cosas. - Bart Kiers

@BluePlateSpecial: Para manejar palabras clave que no distinguen entre mayúsculas y minúsculas, simplemente escriba reconocedores léxicos para cada una, permitiendo explícitamente mayúsculas y minúsculas. La respuesta de Bart es bastante clara. Es un poco más de trabajo; a la larga, no importa mucho. - Ira Baxter

Entendí su respuesta, pero no cambia el hecho de que se descartaron varias opciones muy útiles en v3 (todavía no puedo hacer classHeaderPrefix y la respuesta para ignorar los espacios en blanco no funcionará bien si solo estoy permitiendo ciertas palabras clave y no todas las letras. Como para "in", sería '$' ('' | 'i') ('' | 'n') '$', que empeora mucho con las palabras clave más largas). Además, lo siento, pero ¿por qué la insensibilidad a mayúsculas y minúsculas requiere más trabajo cuando podría integrarse fácilmente en Antlr mediante el uso de toUpper de Java o algo así? En mi propio proyecto, nunca cortaría tantas funciones para una nueva versión. - BluePlateEspecial

Esto es una broma ! La insensibilidad a mayúsculas y minúsculas es muy fácil de manejar, ¡es una simple resta de caracteres! Esto no es nada comparado con la cantidad de trabajo requerida para probar 's' | 'S' ! Primera vez y definitivamente la última vez que uso antlr. - Julio guerra

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.