PDF de programación - Análisis léxico - Formalización y desarrollo

Imágen de pdf Análisis léxico - Formalización y desarrollo

Análisis léxico - Formalización y desarrollográfica de visualizaciones

Publicado el 3 de Junio del 2019
208 visualizaciones desde el 3 de Junio del 2019
1,2 MB
47 paginas
Creado hace 8a (03/03/2011)
Procesadores de Lenguajes

Ingeniería Técnica superior de Ingeniería Informática

Departamento de Lenguajes y Sistemas informáticos

Análisis léxico
Formalización y desarrollo

Javier Vélez Reyes
jvelez@lsi.uned.es
Departamento de Lenguajes Y Sistemas Informáticos
UNED

Análisis léxico. Formalización y desarrollo
Objetivos

Objetivos

› Conocer las responsabilidades de un analizador léxico

› Aprender cómo funciona
› Entender los diferentes tipos de patrones que reconoce

› Aprender a especificar formalmente analizadores léxicos

› A través de gramáticas formales
› A través de expresiones regulares
› A través de autómatas finitos

› Estudiar la implementación de analizadores léxicos

› Conocer las distintas estrategias de implementación
› Entender las posibles relaciones con la tabla de símbolos

› Estudiar la generación de errores léxicos

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Índice

Índice



Introducción
› Token
› Patrón léxico



Lexema
Lenguaje regular

› Especificación de analizadores léxicos

Lenguajes regulares

› Gramáticas lineales
› Expresiones regulares
› Autómatas finitos
› Conversión de formalismos



Implementación de analizadores léxicos



basada en casos




dirigida por tabla
guiada por herramientas
› Estrategias de implementación
› Gestión de errores
› Construcción de A. léxicos en en la práctica

› ¿Qué es JFlex?
› ¿Cómo funciona JFlex?
› ¿Cómo se usa JFlex?
› Gestión de errores en JFlex
› Desarrollo paso a paso

› Bibliografía

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Introducción

Introducción

El primer paso para procesar un programa es convertir la colección de caracteres del
mismo en una colección de componentes léxicos con significado único dentro del
lenguaje llamados tokens. De eso se encarga el analizador léxico o escáner

Foco de atención

El analizador sintáctico va
pidiendo nuevos tokens al
analizador
léxico y éste los
sirve bajo demanda

While ( a > b ) do

a := a + 1;

·

i

·


h

·

w

Analizador léxico

<WHILE, PR>

nextToken ()

Analizador sintáctico

¿Cómo se formaliza un
analizador léxico?

› Conversión entre formalismos

Formalismos

¿Cómo se implementa un
analizador léxico?




Estrategias de implementación
Buenas prácticas

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Introducción

Introducción

El primer paso para procesar un programa es convertir la colección de caracteres del
mismo en una colección de componentes léxicos con significado único dentro del
lenguaje llamados tokens. De eso se encarga el analizador léxico o escáner

Definición de token

Categorías de token

Un token es una unidad léxica indivisible con
significado único dentro del lenguaje. Desde el punto
de vista tecnológico se trata de una estructura de
datos que contiene información sobre

ID: Tipo del token

› Número de línea
› Número de columna



Lexema
Valor…

Los tipos de tokens existentes en un lenguaje son
una característica intrínseca al mismo. No obstante,
pueden encontrarse categorías generales

Categoría

Ejemplos

Delimitadores

( ) , ; : [ ]

Palabras reservadas

while true do if for

Identificadores

Index f isEven

Números enteros

3 -4 55 0 7658

Números flotantes

4.5 .3 0.5 8.4e-5

Simbolos especiales

+ -* / . = < > <= >= != ++

Cadenas

“Hola mundo!”

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Introducción

Introducción

Cada tipo de token representa a un conjunto de tokens (construcciones léxicas
diferentes) con unos mismos propósitos dentro del lenguaje. Estos tipos se definen a
través de un patrón léxico al que se adscriben los lexemas del tipo

Definición de patrón léxico

Definición de lexema

Un patrón léxico es una expresión abstracta llamada
expresión
identificar
unívocamente un tipo de token y referenciar al
conjunto de todos los tokens que se ajustan a él.

permite

regular

que

La cadena de caracteres específica de un token
que se ajusta al patrón léxico de su tipo se llama
lexema. Existen dos tipos de lexemas

› Cadena propia: lexema idéntica al patrón
› Cadena no propia: lexema encaja con patrón

Tipo de token

Patrón léxico

Ejemplos de lexema

Cadena propia

While

Enteros

División

while

digito+

/

while

12 123 0 45

/

Identificador

letra (letra |digito)*

Index f isEven

SI

NO

SI

NO

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Introducción

Introducción

Desde la perspectiva léxica un programa es una familia ordenada de
tokens de varios tipos. Cada tipo, a través de su patrón léxico, define
un micro lenguaje formado por todos aquellos lexemas que encajan
con el patrón léxico. Este tipo de lenguajes sencillos se llaman
lenguajes regulares

Definición de lenguaje regular

Un lenguaje regular describe una familia de tokens
que se ajustan a un determinado patrón léxico.

Lenguaje de

delimitadores de Pascal

Lenguaje de palabras
reservadas de Pascal

Lenguaje de

identificadores Pascal

;
=
,
:
[
..
]
(
)
...

do
downti
if
then
End
...

program
uses
const
var
intger
of
array
begin
for
to

burbuja
ctr
n
i
j
temp
a
readln
writeln
...

program burbuja;
uses crt;
const

n = 5;

var

i,j,temp:integer;
a:array[1..n] of integer;

begin

for i := 1 to n do

readln(a[i]);

for j := (n - 1) downto 1 do

for i := 1 to j do

if (a[i])>(a[i+1]) then
begin

temp := a[i];
a[i] := a[i+1];
a[i+1] := temp;

end;

writeln ('El resultado es:');
for i := 1 to n do
writeln (a[i]);

readln;

end.

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Especificación formal de analizadores léxicos

Especificación de lenguajes regulares

Además de la declaración extensiva – sólo viable en los lenguajes finitos – existen 3
diferentes maneras de definir formalmente un lenguaje regular. A lo largo de esta
sección estudiaremos cada una de ellas en detalle y veremos cómo se puede pasar de
cada una a las otras 2

Gramáticas

lineales

Lenguajes
regulares

Expresiones
regulares

Autómatas

finitos



Elementos

› Gramáticas lineales



Expresiones regulares
Autómatas finitos



Transformaciones

› De gramáticas a expresiones
› De gramáticas a autómatas
› De expresiones a gramáticas
› De expresiones a autómatas
› De autómatas a gramáticas
› De autómatas a expresiones

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Especificación formal de analizadores léxicos

Especificación mediante gramáticas lineales

Una forma de definir formalmente un lenguaje regular es utilizar una gramática lineal,
que describe todas las reglas que se pueden aplicar para la construcción de lexemas
que pertenecen al lenguaje regular

Definición de gramática lineal
Una gramática lineal es un conjunto de 4 elementos
G = (T, N, S, P) donde:

Tipos de gramáticas lineales
Existen en realidad 2 tipos de gramáticas lineales. En
función de la forma del conjunto de reglas de
producción podemos distinguir entre:

T es un conjunto de símbolos terminales


› N es un conjunto de símbolos no terminales



S Є N axioma gramatical
P un conjunto de reglas de producción de la forma

1. A ::= B x donde A, B Є N y x Є T
2. A ::= x B donde A, B Є N y x Є T
3. A ::= x donde x Є T U {

}

A veces T se elide, N se deduce de los antecedentes de
las reglas de P y se asume que el antecedente de la
primera regla es S con lo G sólo a través de P

representa la cadena vacía (ausencia de terminal)

› Gramáticas lineales por la izquierda

› Usan reglas A ::= B x
› Usan reglas A ::= x

› Gramáticas lineales por la derecha

› Usan reglas A ::= x B
› Usan reglas A ::= x

Dada una gramática G lineal por la izquierda siempre
se puede encontrar una gramática G’
lineal por la
derecha y recíprocamente

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Especificación formal de analizadores léxicos

Especificación mediante gramáticas lineales

Una forma de definir formalmente un lenguaje regular es utilizar una gramática lineal,
que describe todas las reglas que se pueden aplicar para la construcción de lexemas
que pertenecen al lenguaje regular

Derivación gramatical
Una gramática debe interpretarse como un conjunto de reglas de reescritura o
transformación de elementos no terminales en elementos terminales o no
terminales.

Ejemplo

LG = {a b*}
Sea G = (T, N A, P) con




La primera transformación parte del axioma
En cada paso se aplica una única regla





Las reglas pueden extender la transformación ( A::= B x / A ::= x B)
Las reglas pueden ser recursivas (A ::= A x / A ::= x A)
Las reglas pueden ser terminales (A ::= x)



El proceso debe ser convergente

T = {a, b}
N = {A, B}
P = {

A ::= a B
A ::= a
B ::= b B
B ::= b

}

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Especificación formal de analizadores léxicos

Especificación mediante gramáticas lineales

Una forma de definir formalmente un lenguaje regular es utilizar una gramática lineal,
que describe todas las reglas que se pueden aplicar para la construcción de lexemas
que pertenecen al lenguaje regular

Derivación gramatical
El problema ahora se traduce en, dada una cadena formada por una secuencia de
elementos terminales de T, demostrar que dicha cadena pertenece al
lenguaje
definido por la gramática

Ejemplo

LG = {a b*}
Sea G = (T, N A, P) con

Cadena de
derivación

axioma

asidero

A → aB → abB → abbB → abbb

Paso de
derivación

Forma
de frase

Frase

T = {a, b}
N = {A, B}
P = {

A ::= a B
A ::= a
B ::= b B
B ::= b

}

Javier Vélez Reyes jvelez@lsi.uned.es

Análisis léxico. Formalización y desarrollo
Especificación formal de analizadores léxicos

Especificación mediante gramáticas lineales

Una forma de definir formalmente un lenguaje regular es utilizar una gramática lineal,
que describe todas las regl
  • Links de descarga
http://lwp-l.com/pdf16025

Comentarios de: Análisis léxico - Formalización y desarrollo (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad