Eliminación
de e espacios en blanco y comentarios: el traductor de
expresiones reconoce todos los caracteres de la entrada, de modo que los
caracteres extraños, como los espacios en blanco, harán que falle. Muchos
lenguajes permiten que aparezcan “espacios en blanco” (caracteres en blanco,
caracteres TAB y de nueva línea) entre los componentes léxicos. Los comentarios
también pueden no ser considerados por el analizador sintáctico y el traductor,
por tanto también se pueden tratar como espacios en blanco.
Si el analizador léxico elimina los espacios en
blanco, el analizador sintáctico nunca tendrá que considerarlos.
Constantes: en cualquier momento que
aparece un dígito solo en una expresión, parece razonable poner una constante
entera arbitraria en su lugar. Como una constante entera es una secuencia de
dígitos, pueden admitirse constantes enteras añadiendo producciones a la gramática
de las expresiones o creando un componente léxico para tales constantes. La
tarea de agrupar dígitos para formar enteros se le asigna, por lo general, a un
analizador léxico, por que los números se pueden tratar como unidades simples
durante la traducción.
Sea num el componente
léxico que presenta un entero. Cuando una secuencia de dígitos aparece en la
cadena de entrada, en analizador léxico pasara num al analizador sintáctico. El
valor del entero se pasara como atributo del componente léxico num.
Lógicamente, el analizador léxico pasa al componente léxico y el atributo al
analizador sintáctico. Al escribir un componente léxico y su atributo como una
tupla encerrada entre <>, la entrada 31+28+59 se transforma en la
secuencia de tuplas <num, 31> <+,> <num, 28> <+,>
<num, 59>
El componente léxico + no
tiene atributos. Los segundos componentes de las tuplas, los atributos, no
desempeñan papel alguno durante el análisis sintáctico, pero son necesarios en
la traducción.
Reconocimiento
de palabras claves e identificadores: los lenguajes utilizan
identificadores como nombres de variables, matrices, funciones y similares. A
menudo, una gramática para un lenguaje trata a un identificador como un
componente léxico. Un analizador basado en esta gramática espera ver el mismo
componente léxico.
Por ejemplo id, cada vez que un identificador aparezca en la
entrada
Cuenta=cuenta+
incremento;
Seria convertida por el
analizador léxico en la cadena de componentes léxicos id=id+id;
ejemplo Propuesto:
x=8+5-3;
quedaría:
id,1=id,2+id,3-id,4;
ejemplo Propuesto:
x=8+5-3;
quedaría:
id,1=id,2+id,3-id,4;
Un
analizador léxico: cuando entre el
analizador sintáctico y la cadena de entrada se inserta un analizador léxico,
este interactúa con los dos. Lee los caracteres de la entrada, los agrupa en
lexemas y pasa los componentes léxicos formados por los lexemas, junto con los
valores de sus atributos, a las etapas posteriores del compilador. En algunas
situaciones el analizador léxico tiene que leer algunos caracteres por
adelantado antes de poder decidir que componente léxico va a devolver al
analizador sintáctico.
ejemplo:
El analisis lexico es;
Lexema: Token:
Sacanner palabra reservada
reader palabra reservada
= (=) o Asignacion
New palabra reservada
Sacanner palabra reservada
( parentesis open
System.in palabra reservada
) parentesis close
; palabra reservada
int palabra reservada
Numero1 id,1
, palabra reservada
Numero2 id,2
; palabra reservada
ejemplo:
Scanner reader = new Scanner(System.in); int Numero1, Numero2;
El analisis lexico es;
(Scanner,reservado) (reader,reservado) = (new, reservado) (Scanner,reservado)(()(System.in)())(;)
(int,reservado) (id,1)(,)(id,2)(;)
Lexema: Token:
Sacanner palabra reservada
reader palabra reservada
= (=) o Asignacion
New palabra reservada
Sacanner palabra reservada
( parentesis open
System.in palabra reservada
) parentesis close
; palabra reservada
int palabra reservada
Numero1 id,1
, palabra reservada
Numero2 id,2
; palabra reservada
0 comentarios:
Publicar un comentario