GUADALINEX

Páginas: 11 (2573 palabras) Publicado: 29 de enero de 2014
Departamento de Lenguajes y Sistemas Informáticos

Universidad de Sevilla

PROCESADORES DE LENGUAJES I
PRÁCTICA DE LABORATORIO 2
En esta práctica trabajaremos con ANTLR a nivel léxico, estudiaremos los elementos
que esta herramienta proporciona para especificar analizadores léxicos y los
aplicaremos a la resolución de distintos aspectos como la identificación de tokens, el
tratamiento depalabras reservadas y comentarios o la sensibilidad a mayúsculas y
minúsculas.

Un ejemplo simple
En ANTLR no se utilizan expresiones regulares y autómatas finitos para especificar e
implementar, respectivamente, analizadores léxicos. En su lugar se aprovechan la
misma notación y el mismo tipo de reconocedores utilizados en la generación de
analizadores sintácticos, o sea gramáticas EBNF yreconocedores recursivos
descendentes. Con esta decisión se gana en homogeneidad a nivel de notación, aunque
en algunas ocasiones se echan de menos algunas facilidades propias de las expresiones
regulares, fundamentalmente el hecho de no tener que preocuparse de que los patrones
léxicos tengan prefijos comunes, problema que en los reconocedores descendentes está
siempre presente. Elsiguiente analizador léxico detecta números, paréntesis,
separadores y operadores aritméticos, además de ignorar blancos, tabuladores y saltos
de línea:
///////////////////////////////
// Analizador léxico
///////////////////////////////
class Analex extends Lexer;
protected NUEVA_LINEA: "\r\n"
{newline();};
BLANCO: (' '|'\t'|NUEVA_LINEA)
{$setType(Token.SKIP);};
protected DIGITO: '0'..'9';NUMERO: (DIGITO)+('.'(DIGITO)+)?;
OPERADOR: '+'|'-'|'/'|'*';
PARENTESIS: '('|')';
SEPARADOR: ';';
Como se puede observar la especificación es bastante intuitiva y se comprende a simple
vista, tan solo merece la pena comentar algunos detalles:
• Las reglas se especifican en notación EBNF, por lo que se podrán utilizar los
operadores de cierre (*), cierre positivo (+), opción (|) y opcional(?). Es
aconsejable encerrar entre paréntesis todos aquellos elementos sujetos a los
operadores unarios *, + y ?..
• Los caracteres se especifican con comillas simples (p.e. '0','\t' y '+' ).

Departamento de Lenguajes y Sistemas Informáticos








Universidad de Sevilla

Las secuencias de caracteres se especifican con comillas dobles como por
ejemplo "\r\n", en este casoconcreto cabe reseñar que la combinación se
corresponde con la manera en la que en Windows se codifica la nueva línea (si
solamente pusiésemos '\n' no funcionaría en esta plataforma).
Con la acción {$setType(Token.SKIP);} se establece que los tokens
reconocidos en la regla correspondiente deben ser ignorados y no serán, por
tanto, visibles para el analizador sintáctico.
Los rangos de caracteresse especifican con el operador ".." (p.e.
'0'..'9').
Con la acción {newline();} se establece que los tokens correspondientes
provocan un cambio de línea, por lo que los contadores de fila y columna son
actualizados convenientemente.
Con el modificador protected se indica que la regla correspondiente no
describe un token, sino que sirve de apoyo en la definición de una regla más
compleja.Así, en el ejemplo, la regla BLANCO se apoya en la regla protegida
NUEVA_LINEA.

Como todos los analizadores en ANTLR, el analizador léxico se implementa a través de
una clase. En nuestro caso esta clase se llamará Analex y siempre será una subclase de
CharScanner, que es la clase que implementa el comportamiento genérico de los
analizadores léxicos. La clase Analex tiene varios métodos quepermiten lanzar el
reconocimiento de tokens y consultar o modificar atributos propios del analizador. De
ellos los dos más destacados son:
• nextToken: cada vez que se ejecuta devuelve el siguiente token identificado
en el flujo de entrada.
• makeToken: es heredado de la clase CharScanner y es el utilizado por el
analizador para construir los objetos de la clase Token y actualizar sus...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Curso guadalinex, ejercicios openoffice
  • Guadalinex-iniciación
  • Curso guadalinex

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS