Compiladores - PowerPoint PPT Presentation

1 / 28
About This Presentation
Title:

Compiladores

Description:

Atributo valor: double con el valor num rico. Precisi n: entero o real. Punto y Coma: ... double ScanEntero; // Valor num rico. double ScanReal; // Valor num rico ... – PowerPoint PPT presentation

Number of Views:133
Avg rating:3.0/5.0
Slides: 29
Provided by: jav147
Category:
Tags: compiladores | dbl

less

Transcript and Presenter's Notes

Title: Compiladores


1
Compiladores
  • Tema 3
  • Análisis Lexicográfico
  • Scanners

2
Scanner
Programa fuente (secuencia de caracteres)
Scanner (autómata finito determinista o
específico)
Secuencia de símbolos
Símbolo
Categoría sintáctica número, identificador,
if, suma, abrir paréntesis Atributos valor,
nombre, string.
3
Ejemplos de Símbolos
  • Identificador
  • Forma una letra seguida de letras o números. Ej.
    a, b1, c3D
  • Atributo nombre string con la secuencia de
    caracteres que forma el identificador en
    mayúsculas. Ej. A, B1, C3D
  • Número
  • Forma secuencia de dígitos que puede empezar con
    el signo menos y puede contener un punto. Ej. 10,
    -3, 15.4, -54.276, .10
  • Atributo valor double con el valor numérico.
  • Precisión entero o real.
  • Punto y Coma
  • Forma
  • Palabra clave if
  • Forma if, If, IF, iF
  • Fin de fichero
  • Forma carácter EOF de C.

4
Separación en Símbolos
  • Los comentarios, saltos de línea, espacios y tabs
    no forman parte de la secuencia de símbolos.
  • Al definir los símbolos se ha de considerar como
    se separan.
  • Entre dos símbolos se encuentra cararcteres
    separadores (espacios, tabs, comentarios, etc.)
  • Siempre se intenta leer el símbolo más largo
  • Ejemplos
  • if ( a gt 10 ) bc 30 - 4
  • if ( a gt 10 ) bc 30 - 4
  • int a
  • zz / comentario / dd

5
Especificación
  • Símbolos identificador, abrir paréntesis,
    string, etc.
  • Forma
  • Expresiones regulares para cada categoría
    sintáctica.
  • Atributos
  • Algoritmo para el cálculo de cada atributo a
    partir de la secuencia de caracteres del símbolo.
  • Separadores espacios, comentarios, salto de
    línea, tab, etc.
  • Forma
  • Expresión regular que especifica las secuencias
    de caracteres que separan los símbolos.
  • Otros errores, final de fichero, salto de línea,
    etc.

6
Expresiones Regulares
  • Æ es una expresión regular que representa el
    conjunto vacío.
  • l es una expresión regular que representa el
    conjunto con un único elemento que es la
    secuencia vacía
  • un string s es una expresión regular que
    representa un conjunto que solo contiene s. Para
    evitar confusiones, los metacaracteres que
    contenga s van entre comillas (,-,...).
  • V es el conjunto de todos los caracteres
    (vocabulario).

7
Expresiones RegularesOperadores
  • AB Concatenación
  • ab aÎA y bÎB
  • AB unión x xÎA ó xÎB
  • A repetición lAAAAAA...
  • A repetición de uno o más AAAAAA...
  • An repetición de n veces.
  • (A-B) resta x xÎA y xÏB

8
Ejemplos de Expresiones Regulares
  • dígito d0123456789
  • entero_sin_signod
  • entero(-l)d
  • reald.d(le(-l) d)
  • letra la...zA...Z
  • identificadorl(ld)
  • string(V-)

9
Scanner implementado a mano
  • El scanner es un procedimiento que lee un símbolo
    del programa fuente
  • Entrada caracteres de un istream
  • istream IScan // Stream de entrada
  • Salida símbolo en variable global
  • enum Categoria
  • SNumero,SIdentificador,SString, Sif...
  • Categoria ScanCat // Categorita sintáctica
  • double ScanEntero // Valor numérico
  • double ScanReal // Valor numérico
  • bool ScanEsEntero // Tipo de número
  • string ScanString // String del símbolo
  • Condiciones que cumple el scanner
  • Lee caracteres hasta conseguir leer un símbolo
  • En caso de duda lee el símbolo más largo
  • Al salir del scanner, el último carácter leído
    pertenece al símbolo. Si se ha leído alguno más
    se devuelve a la entrada

10
Scanner en C
  • void Scanner()
  • int c
  • for ()
  • cIScan-gtget()
  • switch (c)
  • // Separadores
  • case '\r'
  • case '\n'
  • case '\t'
  • case ' '
  • break
  • default
  • if ((cgt'a' clt'z') (cgt'A'
    clt'Z') (c'_'))
  • ScanIdentificador(c)
  • return
  • else

11
Scanner de Identificadores en C
  • void ScanIdentificador(int c)
  • char buf256
  • int i
  • for (i0 (cgt'a' clt'z')
  • (cgt'A' clt'Z')
  • (c'_')
  • (cgt'0' clt'9'))
  • if (igt254)
  • throw CVException(Identificador
    demasiado largo")
  • bufic
  • cIScan-gtget()
  • bufi'\0'
  • ScanCatSIdentificador
  • ScanStringbuf
  • IScan-gtputback(c)

12
Autómatas Finitos
  • Autómata finito determinista (K,T,M,S,Z)
  • K conjunto finito de estados.
  • T conjunto de terminales (símbolos/caracteres de
    entrada).
  • MKTK función de transición.
  • SÎK estado inicial.
  • ZÍK conjunto de estados finales.
  • Autómata finito no determinista (K,T,M,S,Z)
  • MKTP(K) función de transición.

13
Representación de los Autómatas Finitos
Transición
1
Estado
Estado final
Estado inicial
1
1
d
a
b
c
1
2
3
4
Acepta las secuencias abc(dc) Ej. abc, abcdc,
abcdcdc, abcdcdc...
14
Paso de Expresión Regular a AFND
Exp. a
a
Exp. l
l
Exp. AB
AFND de A
l
l
AFND de B
l
l
15
Paso de Expresión Regular a AFND
Exp. AB
l
AFND de A
l
l
AFND de B
16
Paso de Expresión Regular a AFND
l
Exp. A
l
l
AFND de A
l
17
Ejemplo del Paso de Exp. Regular a AFND
Expresión abac
l
l
AFND ab
AFND ac
l
l
Expresión ab
l
AFND a
l
l
AFND b
Expresión ac
18
Ejemplo del Paso de Exp. Regular a AFND
Expresión ac
l
AFND a
l
l
AFND c
a
Expresión a
b
Expresión b
l
l
Expresión c
AFND c
c
l
Expresión c
19
Ejemplo del Paso de Exp. Regular a AFND
b
Expresión abac
3
a
2
AFND
1
a
4
c
  • Problema
  • Un a AFND puede seguir más de un camino durante
    su interpretación.
  • Solución
  • Pasar de AFND a AFD.

20
Paso de AFND a AFD
  • El conjunto de estados del nuevo AFD es el
    conjunto de las partes del conjunto de estados
    del AFND.
  • El estado inicial del AFD es el mismo que el del
    AFND.
  • Un estado del AFD es final si contiene algún
    estado final del AFND.

21
Cálculo del Conjunto de Transiciones
  • Poner el estado inicial en el conjunto de estados
    K del AFD. El conjunto de transiciones MÆ.
  • Repetir hasta que K y M no varíen
  • Para cada estado de K y carácter de entrada
    aplicar las transiciones posibles del AFND y
    acumular en K y M el nuevo estado y la nueva
    transición.

22
Ejemplo del Paso de AFND a AFD
b
Expresión abac
3
a
2
AFND
1
a
4
c
Tabla de Transiciones AFD
I S F 1 a 2,4 2,4 b 3 2,4 c 4 4 c 4
b
3
a
2,4
AFD
1
c
4
c
23
Implementación de un AFD
  • Variable de estado S.
  • Tabla de transiciones T dado un estado y un
    carácter de entrada específica el nuevo o error.
  • Algoritmo
  • Sestado inicial.
  • Repetir
  • Cleer_caracter()
  • si TSCerror entonces salir del bucle
  • STSC
  • si S no es final error

24
Ejemplo de Tabla de Transiciones
b
3
a
2
1
c
4
c
Tabla de Transiciones
a b c 1 2 Err Err 2 Err 3 4 3 Err Err Err 4 Err E
rr 4
25
Scanner Basado en AFD
  • Un AFD no es un scanner. Falta
  • Poder leer una secuencia de símbolos y
    separadores
  • Diferenciar las categorías sintácticas de los
    símbolos

26
Consideraciones Prácticas
  • Las palabras reservadas se pueden considerar como
    identificadores para evitar crear un AFD
    demasiado grande (2n estados del AFND).
  • Hay que marcar el final del código fuente. Este
    indicador pertenecerá al alfabeto.
  • Los símbolos tienen atributos que hay que
    calcular.

27
Consideraciones Prácticas
  • Los estados finales del AFD se han de marcar con
    el símbolo que reconocen.
  • Como hay que reconoce más de un símbolo puede ser
    necesario tener que leer varios caracteres hacia
    delante.
  • La creación de un scanner se puede hacer
    directamente sin considerar los autómatas finitos.

28
Errores Lexicográficos
  • Tener un símbolo de error que se pasa al parser.
  • Señalar el error e ignorarlo.
  • Tratamiento específico.
  • Falta información para corregir los errores
    lexicográficos.
Write a Comment
User Comments (0)
About PowerShow.com