Vous êtes sur la page 1sur 11

1

Programa g Fuente

Analizador L i Lxico

Componente lxico Obtn otro componente lxico

Analizador Si i Sintctico

Tabla de Smbolos

ANLISIS LXICO

Funciones del Anlisis Lxico


2

Leer los caracteres de la entrada Generar una secuencia de componentes lxicos (TOKENS) Eliminar comentarios, delimitadores (espacios, smbolos de puntacin, fin de lnea) Relacionar los mensajes de error con las lneas del programa fuente Introducir los identificadores en la tabla de smbolos

Aspectos del Anlisis Lxico


3

Diseo ms sencillo

Los smbolos que trata el scanner se describe con una gramtica ms simple que la del parser, gramtica regular Gran parte del tiempo de compilacin se consume en la lectura y exploracin de caracteres Se pueden tener varias versiones del scanner una para distintos cdigos (EBCDID, ASCII, ...), con el mismo parser Ejemplo; no puedo distinguir en FORTRAN hasta despus del 1

Mejora la eficiencia

Mejora la transportabilidad

Descarga el anlisis sintctico

DO 5 I=1.25 DO 5 I=1,25

Funciones Principales de AL
4

Formacin y entrega al parser de los tokens M Manejar el fichero f del programa f fuente Explorar los literales Listar el programa fuente Manejar las macros Controlar si es de formato libre o no
Libre:

PASCAL, ALGOL No libre: FORTRAN, BASIC

Tokens, patrones y lexemas, I


5

Un token es un smbolo terminal de la gramtica del analizador sintctico Varias cadenas diferentes en la entrada pueden dar el mismo token a la salida Un token se describe mediante un patrn Un lexema es un conjunto de caracteres que concuerdan con el patrn de un token En la mayora de lenguajes son tokens:
Palabras

clave, operadores, identificadores, constantes, cadenas literales y signos de puntacin

Tokens, patrones y lexemas, II


6

Existen una serie de palabras clave (reservadas) en muchos lenguajes que conviene introducir directamente en la tabla de smbolos: smbolos Tokens Lexemas
if id if x1,a,b > + := then 3 relacin op asign then

if x1>3 then a:=b+x1

Atributos:

num

Los atributos de los identificadores se pueden guardar en la tabla de smbolos Los otros se pueden guardar en otra tabla o devolverlos junto al token

Tokens, patrones y lexemas, III


7

Componente Lxico Const If Relacin Identificador Nmero Literal

Lexemas de Ejemplo Const If <,<=,=,<>,>=,> Pi, cuenta, D2 3.1416, 0 el resultado:

Descripcin del Patrn Const If < O <= o = o <> o >= o > [a-zA-z]+ [0-9]?\.[0-9]+ Cualquier carcter entre menos

Anlisis Lxico, representacin


8

Expresin Regular

[ [a-zA-Z][a-zA-Z0-9]* ][ ]

Autmata finito (diagrama o tabla de transicin)


a *q1 ... z A q1 q1 ... ... ... Z q1 q1 0

... ... ...

q0 q1 ... q1 q1 ... q1

q1

q1

Gramtica Lineal (regular)


S::= aR | ... | zR | AR | ... | ZR R::= aR | ... | zR | AR | ... | ZR | 0R | ... | 9R |

Analizador de relaciones matemticas


9

q0 = > otro

<

q1

= >

q2 q3 q4

Devuelve <rel,<=> Devuelve <rel,<>> Devuelve <rel,<>

q5 q6 q9 = otro

otro q7 q8
Devuelve <rel,>=> Devuelve <rel,>>

Implementacin de un AL
10

Utilizando un lenguaje de alto nivel


Programacin Tabla compacta Hasing Autmata programado Ms eficiente Ms difcil Ms cmodo

Utilizando ensamblador

Utili d un generador Utilizando d de d Analizadores A li d Lxicos L i (LEX)

Consejo: Ordenar las reglas/transiciones de acuerdo a la frecuencia de utilizacin

Programacin de un AL
11

Dos punteros de lectura:


Puntero actual (PA, current pointer): El ltimo carcter aceptado Puntero de bsqueda (PB, lookahead pointer): El ltimo carcter ledo GetChar: mueve el PB hacia delante y devuelve el siguiente carcter Fail: mueve el PB a donde est el PA Retract: mueve el PB un carcter hacia atrs Accept: mueve el PA a donde est el PB IsLetter(x):= x [A..Za..z] IsDigit(x):= x [0..9] IsDelimiter(x):= x [.,;<newline><eof>] InstallName(id): introduce un nombre en la tabla de smbolos

Funciones de lectura:

Predicados:

Acciones:

Ejemplo con Identificador


12

Identificador::= letra(letra+dgito)* Pseudocdigo g


c:= GetChar If IsLetter(c) Then identificador:= Repeat identificador:=identificador+c c:=GetChar Until not(IsLetter(c) OR IsDigit(c)) Retract token:=(Id Install(identificador)) token:=(Id, Accept Return (token) Else Fail

Qu ocurre con? x1, temp, 102

Ejemplo con Constante Entera


13

Entero::= dgito+ Pseudocdigo g c:= GetChar


If IsDigit(c) Then Valor:=Convertir(c) c:=GetChar While IsDigit(c) do Valor:=10 * Valor + Convertir(c) c:=GetChar EndWhile Retract token:=(Entero, Valor) Accept Return (token) Else Fail

Qu ocurre con? x1, 102, 10.3

Implementacin con tabla compacta I


14

b q1 a d q5 q2 d c

L={dda$, abnca$|n>=0} q3 a q4 $ q6

a b c d $ 1 2 - - 5 2 - 2 3 - 3 4 - - - 4 - - - - 6 5 - - - 3 6 - - - - -

Implementacin con tabla compacta II


15

Para ahorrar memoria se guardan los elementos no nulos en una matriz VALOR de dos valores y con tantos elementos como posiciones no nulas de M Se crea otra tabla, PRIFIL, con el primer VALOR de cada lnea Nmero de elementos (no nulos) de VALOR para esa lnea
VALOR COL 1 2 3 4 5 6 7 2 5 2 3 4 6 3 1 4 2 3 1 5 4 1 2 3 4 5 6 PRIFIL 1 3 5 6 7 0 FIL 2 2 1 1 1 0 M(2,3)? PRIFIL(2)=3 FIL=2, esto significa que los elementos 3 y 4 de VALOR contienen las transiciones del estado 2, de los dos el que tiene valor COL=3 tiene una transicin a 3

Programacin con Tabla Hash


16

Otra forma de programar un analizador lxico es creando una tabla hash con el autmata
a ... z A ... Z 0 ... ... 9 < = ...

q0 q1 ... q1 q1 ... q1 *q1 *q2

q2 q6 ...

q1 ... q1 q1 ... q1 q1 ... q1 q0 q0 ... q0 ... q0 q0 ... q0 q0 ... q0 q0 q0 ...

En cada iteracin, se lee un carcter de la entrada y se transita a un estado dependiendo de la tabla de transiciones Si el autmata es determinista, slo habr una transicin posible para cada smbolo de entrada y no hace falta retroceso

Autmata programado
17

Representa directamente con un programa al autmata en cuestin


estado:=1 while estado<>6 do Leecar {devuelve en car el siguiente carcter ledo} case estado of 1: if car=a then estado:=2 else if car=d then estado:=5 else error 2: if car=c then estado:=3 else if car=b then estado:=2 else error 3: if car=a then estado:=4 else error 4: if car=$ then estado:=6 else error 5: if car=d then estado:=3 else error 3: error end case end while

Programacin con LEX


18 %{LE, LT, GE, GT, EQ, NE, IF, THEN, ELSE %} delimitador [\t\n] blancos {delimitador}+ letra [A-Za-z] digito [0-9] id {letra}({letra}|{digito})* numero {digito}+(|.{digito}+)?(E [+|-]?{digito}+)? %% {blancos} {} if {return(IF)} then {return(THEN)} while {return(WHILE)} ... ... {id} { } {yylval = InstallName(); {yy (); return(ID)} ( )} {numero} {yylval = InstallName(); return(NUMERO)} < {yylval = LT; return(RELACION)} ... ... %% Definicin de la funciones utilizadas arriba

Acciones Semnticas
19

El autmata no debe mostrar nicamente si o no Realmente realiza una Traduccin El explorador realiza comprobaciones en la tabla de smbolos Las acciones semnticas ms comunes son:
AADIR:

concatena caracteres p para construir smbolos LEECAR: lee caracteres de la entrada VER: Comprueba si un identificador est o no en la TdS ADD: Aade un identificador a la TdS

Tratamiento de errores
20

Hay pocos detectables por el analizador lxico Detectables


then::=3+x1 (=if..then?. =identificador?)

Acciones posibles

Nmero de caracteres de los identificadores Caracteres ilegales Otros (si el lenguaje no admite .5 en lugar de 0.5)... Borrar un carcter Insertar un carcter Reeemplazar un carcter Intercambiar dos caracteres

Programa con K errores: hacen falta K cambios para poder ser correcto No se suelen utilizar las acciones de correccin de errores por ser muy costosas

10

AL y Lenguajes de Programacin
21

El AL agrupa caracteres para formar tokens, por tanto es importante definir el delimitador Carcter que delimita el token sin pertenecer a l Otro concepto importante es el de palabra reservada El lenguaje prohbe el uso libre al programador de determinadas palabras que tienen un significado especfico y nico en el lenguaje Se pueden clasificar los lenguajes de programacin por el uso de los delimitadores y palabras reservadas: Delimitadores blancos con palabras reservadas

Caso ms sencillo de lenguaje (PASCAL, COBOL) PL/I El tipo ms difcil de lenguaje, aparecen ambigedades (FORTRAN)

Delimitadores blancos sin palabras resevadas

Blancos se ignoran sin palabras reservadas

Blancos se ignoran con palabras reservadas

Indeterminado

11