ANTLR

jueves, 3 de febrero de 2011

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: