ANTLR es un generador de lenguajes, a partir de la especificación de un lenguaje a partir de una gramática podemos:
• Reconocer si un programa (o palabra) cumple una especificación.
• Traducir el programa (o palabra) a otro lenguaje.
• Realizar alguna serie de órdenes.
A veces nos interesara definir el lenguaje de una forma más laxa. Admitimos palabras/programas que en principio no tengan mucho sentido porque:
• Es más fácil definir la gramática.
• La estructura que define expresa la estructura que buscamos.
Ejemplo de utilización de ANTLR
Definamos una gramática para el lenguaje de los paréntesis.
gramar prueba;
principal
:’(’principal’)’|;
Primera prueba, ¿Cómo definir una gramática para que acepte lo mismo añadiendo los corchetes?
gramar prueba;
principal
: SI principal1 (CONTRA principal) ? |ALGO;
principal1
: SI principal1|ALGO;
SI :’sib’;
CONTRA: ’en_otro_caso’;
ALGO: ’algo’;
WS:(’\n’|’\t’|’\r’|’’) +{ skip ();};
gramar suma;
start: expresion;
expresion
: NUMERO OPERADOR expresión |NUMERO;
NUMERO: ’0’..’9’+;
OPERADOR: ’+’;
ESPACIOS: (’\n’|’\r’|’\t’){skip();};
El EBNF define reglas de producción donde las secuencias de símbolos se asignan respectivamente a a no terminal:
dígito excepto cero:: = “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9” ;
dígito :: = “0”
dígito excepto cero;
Esta regla de producción define el no terminal dígito cuál está en el lado izquierdo de la asignación. La barra vertical representa un alternativa y los símbolos terminales se incluyen con las comillas seguidas por un punto y coma como terminar el carácter. Por lo tanto a Dígito es a 0 o a dígito excepto cero eso puede ser 1 o 2 o 3 y así sucesivamente hasta 9.
ANTLR
http://personales.unican.es/gomezd/Talf/antlr.pdf
0 comentarios:
Publicar un comentario