Analizador Lexico
Analizador Lexico
Analizador Lexico
Aspectos bsicos
Es la primera fase del compilador.
Principales funciones:
Leer los caracteres de entrada y elaborar como
salida una secuencia de componentes lxicos (tokens), los cuales son usados por el analizador sintctico para realizar su anlisis. Eliminar espacios en blanco, tabuladores, caracteres de nueva lnea. Eliminar comentarios Relacionar errores con la posicin en el fuente
Aspectos bsicos
Mltiples motivos para tener una etapa aparte
Sencillez de diseo, al separar convenciones
lxicas y sintcticas Mejoras de eficiencia Mejoras en la portabilidad del compilador. Peculiaridades del alfabeto y la existencia de caracteres especiales se aslan en el analizador lexicogrfico
Conceptos
Token.- Es un smbolo abstracto que representa a un tipo de
unidad lxica. Esta Formado por el nombre del token y un valor de atributo opcional.
Patrn.- es una descripcin de la forma que pueden tomar los
lexemas de un token. En el caso de una palabra clave como token, el patrn es solo la secuencia de caracteres que forma la palabra clave. Para los indicadores y algunos otros tokens, el patrn es una estructura ms compleja.
Lexema.- Es una secuencia de caracteres en el programa fuente,
que coinciden con el patrn de un token y que el analizador lxico identifica como una instancia de ese token.
<,<=,=,>,> < <= = >= > = Pi 3.1416 cadena Letra seguida de letras y nmeros Cualquier constante numrica Cualquier carcter entre . Excepto
analizador sintctico no solo el nombre del token, sino un valor de atributo que describe el lexema que representa ese token.
Errores Lxicos
Tiene una visin muy restringida del fuente, a nivel de
Errores Lxicos
Recuperacin en modo pnico: Es la estrategia ms comn.
Cuando se detecta una cadena no reconocible se eliminan sucesivamente los caracteres hasta detectar un token vlido. Esta estrategia puede confundir al analizador sintctico.
Insertar un carcter que falta: 2C por 2*C .
Reemplazar un carcter incorrecto por otro correcto: intejer
por integer.
Intercambiar dos caracteres adyacentes:
x integer por
integer x .
Pareja de Buffers
Centinelas
Definiciones
Alfabeto.- es un conjunto finito de smbolos.
concatenacin. s = s = s. x = x = x = abc
) es la identidad en la
Cadenas de caracteres(2)
La exponenciacin definida como el producto de cadenas es igual a:
s^0 = s^i = (s^i-1) s donde i>0
Ejemplo: Si s= abc
s^0 = s^1 = abc s^2 = abcabc
Cadenas de caracteres(3)
Prefijo de la cadena s es cualquier cadena que se
obtiene al eliminar cero o ms smbolos del final de s. Por ejemplo: ban, banana y son prefijos de banana.
Sufijo de la cadena s es cualquier cadena que se
obtiene al eliminar cero o ms smbolos del principio de s. Por ejemplo: nana, banana y son sufijos de banana
Cadenas de caracteres(4)
Una subcadena de s se obtiene al eliminar cualquier
prefijo y cualquier sufijo de s. Por Ejemplo: banana, nan y son subcadenas de banana.
Los prefijos, sufijos y subcadenas propios de una
cadena s son esos prefijos, sufijos y subcadenas, respectivamente, de s son que no son ni son iguales a ala misma s.
Cadenas de caracteres(5)
Una subsecuencia de s es cualquier cadena que se forma mediante la eliminacin de cero o ms posiciones no necesariamente consecutivas de s.
Por Ejemplo: baan es una subsecuencia de banana.
e) Subsecuencias
L*
L(L U D)* D+
Expresiones Regulares
Expresin regular, es una notacin que permite describir todos los lenguajes que puedan construirse a partir de estos operadores (unin, concatenacin y cerraduras) aplicados a los smbolos de cierto alfabeto.
Una expresin regular es una expresin que describe un conjunto de cadenas sin enumerar sus elementos.
letra_(letra_ | dgitos)*
Representa los identificadores en lenguaje C
Donde
| significa unin * Significa 0 o ms ocurrencias de () agrupan subexpresiones letra_ con el resto de la expresin indica concatenacin
Si es una expresin regular entonces L() = {}, es decir el lenguaje cuyo miembro es la cadena vaca. Si a es un smbolo en , entonces a es una expresin regular, y Reglas Base: L(a)= {a}, es decir lenguaje con una cadena, de longitud uno, con a en su nica posicin
(r)*
(r)
Al eliminar parntesis en las expresiones regulares hay que tener en cuenta lo siguiente:
El operador unario * tienen la precedencia ms alta y es asociativo a la izquierda La concatenacin tiene la segunda precedencia ms alta y es asociativa a la izquierda | tiene la precedencia ms basa y es asociativo a la izquierda
Ejemplo
(a|b)(a|b)
denota a {aa,ab,ba,bb} el conjunto de cadenas de longitud 2 sobre el alfabeto . Una expresin regular equivalente sera aa|ab|ba|bb
a*
denota el lenguaje que consiste en todas las cadenas de cero mas as es decir {,a,aa,aaa...}
(a|b)*
a|a*b
denota el lenguaje {a,b,ab,aab,aaab,...} es decir, la cadena a y todas las cadenas que consisten en cero mas as y que terminan en b
Conjuntos Regulares
A un lenguaje que puede definirse mediante una
conjunto regular, decimos que son equivalentes y podemos escribir r = s. Ejemplo (a|b) = (b|a)
Por conveniencia de notacin, tal vez sea conveniente poner nombre a ciertas expresiones regulares, y utilizarlos en las expresiones subsiguientes, como si los nombres fueran smbolos por si mismos.
fraccionOpcional
numero
. digitos |
digitos fraccionOpcional exponenteOpcional
Definiciones Regulares
Definicin regular para los identificadores de C
letra_ digito Id [A-Za-z_] [0-9] letra_(letra_ | digito)*
digitos
Numero
digito+
digitos (. Digitos)? (E [+-]? Digitos)?
Reconocimiento de Tokens
Gramtica simple para las instrucciones de bifurcacin y
expresiones condicionales.
instr
expr term
Reconocimiento de Tokens
Patrones para los tokens del ejemplo anterior
digito dgitos numero letra id If [0-9] digito+ digitos (. digitos)? (E [+-]? digitos)? [A-Za-z_] letra_(letra_ | digito)* If
Then
Else oprel ws
Then
Else < | > | <= | >= | = | <> (blanco | tab | nuevalinea)+
Reconocimiento de Tokens
Lexemas
Cualquier ws If Then If Then
Nombre Token
-
Else
Cualquier Id Cualquier nmero < <= = <> > >=
Else
Id Numero Oprel Oprel Oprel Oprel Oprel Oprel
analizador lxico
Tienen una coleccin de nodos o crculos llamados
estados. El estado representa un condicin que podra ocurrir durante el proceso de explorar la entrada buscando un lexema que coincida con uno o varios patrones.
Las lneas que se dirigen de un estado a otro se llaman
posicin.
El estado inicial se lo reconoce puesto que es una arista
Ejercicios
Diagrama de transicin para nmeros sin signos
Autmatas Finitos
Los autmatas finitos son reconocedores; solo dicen si
AFN
Un AFN acepta una cadena de entrada x si y solo si hay algn camino en el grafo de transiciones desde el estado inicial a algn estado de aceptacin. Ser aceptada la cadena aabb?
Smbolos de Entrada
Estado 0 1 2 3
a {0,1} -
AFN - Ejemplo
reconocida recorriendo los estados 0,1,2,2,2. Las etiquetas de las arista son ,a,a,a cuya concatenacin es aaa.
AFN para a de un
regulares s y t: Para la expresin regular s|t, constryase el siguiente AFN compuesto N(s|t)
Glosario.- Expresin
En
programacin, una expresin es una combinacin de constantes, variables o funciones, que es interpretada (evaluada) de acuerdo a las normas particulares de precedencia y asociacin para un lenguaje de programacin en particular.
Ejemplos de expresiones
Expresin aritmtica: 3+2, x+1, ...
un conjunto de estados del AFN y se construye tranD de modo que D simular en paralelo todos los posibles movimientos que N puede realizar con una determinada cadena de entrada Operacin
Cerradura- (s)
Descripcin
Conjunto de estados del AFN a los que se puede llegar desde el estado s del AFN, slo en las transiciones
Cerradura- (T)
Mover(T,a)
Conjunto de estados de AFN alcanzables desde algn estado s en T con transiciones solamente
Conjunto de estados del AFN hacia los cuales hay una transicin con el smbolo de entrada a desde algn estado s en T del AFN
Cerradura- (Mover(A,b))
Cerradura- (Mover(B,a))
Cerradura- (Mover(B,b))
Cerradura- (Mover(C,b))
Cerradura- (Mover(D,a))
Cerradura- (Mover(D,b))
Cerradura- (Mover(E,b))