Articles of antlr

ANTLR 4.5 – Entrada no coincidente ‘x’ esperando ‘x’

He estado empezando a usar ANTLR y he notado que es bastante voluble con sus reglas más lexer. Un ejemplo extremadamente frustrante es el siguiente: grammar output; test: FILEPATH NEWLINE TITLE ; FILEPATH: (‘A’..’Z’|’a’..’z’|’0′..’9’|’:’|’\\’|’/’|’ ‘|’-‘|’_’|’.’)+ ; NEWLINE: ‘\r’? ‘\n’ ; TITLE: (‘A’..’Z’|’a’..’z’|’ ‘)+ ; Esta gramática no coincidirá con algo como: c: \ test.txt X […]

Usando ANTLR 3.3?

Estoy tratando de comenzar con ANTLR y C #, pero me resulta extraordinariamente difícil debido a la falta de documentación / tutoriales. He encontrado un par de tutoriales poco entusiastas para versiones anteriores, pero parece que se han producido algunos cambios importantes en la API desde entonces. ¿Alguien puede darme un ejemplo simple de cómo […]

¿Cómo el ANTLR lexer desambigua sus reglas (o por qué mi analizador produce errores de “entradas no coincidentes”)?

Nota: Esta es una pregunta autoevaluada que pretende proporcionar una referencia sobre uno de los errores más comunes cometidos por los usuarios de ANTLR. Cuando pruebo esta gramática muy simple: grammar KeyValues; keyValueList: keyValue*; keyValue: key=IDENTIFIER ‘=’ value=INTEGER ‘;’; IDENTIFIER: [A-Za-z0-9]+; INTEGER: [0-9]+; WS: [ \t\r\n]+ -> skip; Con la siguiente entrada: foo = 42; […]

lexers vs analizadores

¿Los lexers y analizadores son realmente tan diferentes en teoría? Parece de moda odiar las expresiones regulares: encoding de terror , otra publicación de blog . Sin embargo, las herramientas populares basadas en lexings: pygments , geshi o embellecer , todas usan expresiones regulares. Parecen leer cualquier cosa … Cuando lexing es suficiente, ¿cuándo necesita […]

¿Diferencia práctica entre las reglas del analizador y las reglas del lexer en ANTLR?

Entiendo la teoría detrás de la separación de las reglas del analizador y las reglas del lector en teoría, pero ¿cuáles son las diferencias prácticas entre estas dos declaraciones en ANTLR? my_rule: … ; MY_RULE: … ; ¿Dan como resultado diferentes árboles AST? ¿Desempeño diferente? ¿Ambigüedades potenciales?

¿Cómo convertir una cadena a su árbol de expresiones LINQ equivalente?

Esta es una versión simplificada del problema original. Tengo una clase llamada Persona: public class Person { public string Name { get; set; } public int Age { get; set; } public int Weight { get; set; } public DateTime FavouriteDay { get; set; } } … y digamos una instancia: var bob = new […]

Si / else declaraciones en ANTLR utilizando oyentes

Estoy creando un lenguaje de progtwigción simple para un proyecto escolar. Estoy usando ANTLR 4 para generar un analizador y un analizador de mi gramática. Hasta ahora, he estado usando el patrón de escucha ANTLRs para aplicar la funcionalidad real del lenguaje de progtwigción. Ahora me gustaría implementar las sentencias if / else, pero no […]

Cómo crear AST con ANTLR4?

He estado buscando MUCHO sobre esto y no pude encontrar nada útil que REALMENTE me ayude a construir un AST. Ya sé que ANTLR4 no construye AST como solía hacer ANTLR3. Todos dicen: “¡Oigan, visiten!”, Pero no pude encontrar ningún ejemplo o explicación más detallada sobre CÓMO puedo hacer esto … Tengo una gramática como […]

¿Cómo generar el AST construido utilizando ANTLR?

Estoy haciendo un analizador estático para C. He hecho el analizador y el analizador usando ANTLR en el cual se genera código Java. ¿ANTLR construye el AST para nosotros automáticamente por options {output=AST;} ? ¿O tengo que hacer el árbol yo mismo? Si lo hace, ¿cómo escupir los nodos en ese AST? Actualmente estoy pensando […]

ANTLR: ¿Hay un ejemplo simple?

Me gustaría comenzar con ANTLR, pero después de pasar unas horas revisando los ejemplos en el sitio de antlr.org , todavía no puedo obtener una comprensión clara de la gramática en el proceso de Java. ¿Hay algún ejemplo simple, algo así como una calculadora de cuatro operaciones implementada con ANTLR pasando por la definición del […]