Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Análisis Léxico
Fases de la Compilación
Errores
Tabla
de
Símbolos
Errores
Programa
Fuente * Análisis
Léxico
Análisis
Sintáctico
Generación
de Código
Salida
Tabla
de
Símbolos
Errores
Programa
Fuente
Análisis
Léxico
* Análisis
Sintáctico
Generación
de Código
Salida
Tabla
de
Símbolos
Errores
Tira de
Programa Tokens
Análisis Análisis Generación Salida
Fuente
Léxico Sintáctico de Código
Tabla
de
Símbolos
Tira de Lista de
Tokens Reglas
Tabla de Tabla de
Símbolos Símbolos
Concurrente
Ejemplo: gcc c1 ¦ c2 ¦ c3
(AL) (AS) (GC)
Monolítico
El Generador de Código es el main
El A.S. entrega una regla cuando el G.C. se la pide, y el A.L. entrega un token
cuando el A.S. se lo pide
Generación Salida
de Código
get next
Regla
rule
Análisis
Sintáctico
get next
Token
token
Programa Análisis
Fuente Léxico
Monolítico
El Parser (A.S.) es el main:
El Analizador Sintáctico va pidiendo tokens al Léxico, y cuando tiene una regla
le pide al G.C. que genere código para ella.
Análisis
Sintáctico
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
Errores
Tira de Lista de
tokens reglas
Programa Análisis Análisis Generación Salida
Fuente
Léxico Sintáctico de Código
Tabla
de
Símbolos
if Plazo >= 30
then Tasa := Base + Recargo / 100
else Tasa := Base
[59] [27] [80] [28] [60] [27] [85] [27] [70] [27]
[73] [28] [61] [27] [85] [27]
A → a | Aa (recursiva a izquierda)
A → a | aB (recursiva a derecha)
A → Sa | Aa A
a
B → Sb | Bb | Ab
S b
C → Bc
b c C
S→ε
B
Reglas Léxicas:
<ID> → <letra> | <ID> <letra> | <ID><digito>
<CTE> → <digito> | <CTE> <digito>
<letra> → a | b | c | … | z
<digito> → 0 | 1 | 2 | … | 9
l c–l–d
0 1 F
d c–d
0 2 F
‘*’
0: <Inicio> <PCom> → <Inicio> ‘/’
3: <PCom> <Com> → <PCom> ‘*’ | <Com> otro1 |
4: <Com> <PFCom> otro2
5: <PFCom> (otro1 es cualquier carácter distinto de ‘*’ y otro2 cualquier carácter distinto de ‘*’ y ‘/’)
3
‘/’ C – ‘*’
0 F
‘+’, ‘-’, ‘*’
‘>’ ‘=‘
0 7 F
otro
‘=‘ F1
‘>’ c ‘>’
0 7 F 0 7
otro F2
c: cualquier carácter
Blanco, tab, nl
d
d c–l–d
l
2
c–d
d
3
c – ‘*’
Blanco, tab, nl ‘/’ ‘*’
0 4 F
c – ‘*’
‘/’ ‘*’
c – ‘*’ – ‘/’
5
‘+’, ‘-’, ‘*’
‘*’
‘>’, ‘=‘
‘<’
6 c – ‘>’ – ‘=’
‘>’
‘=‘
7
c – ‘=’ c – ‘=’
‘=‘
‘=‘
8
Matriz de Transición de Estados
otro BL
l d / * + - = < > tab nl
$
0 1 2 3 F F F 8 6 7 F 0 F
1 1 1 F F F F F F F F F F
2 F 2 F F F F F F F F F F
3 F F F 4 F F F F F F F F
4 4 4 4 5 4 4 4 4 4 4 4 F
5 4 4 0 5 4 4 4 4 4 4 4 F
6 F F F F F F F F F F F F
7 F F F F F F F F F F F F
8 F F F F F F F F F F F F
Autómata
Palabras Reservadas
Palabra reservada: Secuencia de letras mayúsculas
Acción Semántica 1:
Devolver a la entrada el último carácter leído
Buscar en la TPR
Si está, devolver la Palabra Reservada
Si no está,
Buscar en la TS
Si está, devolver ID + Punt TS
Si no está,
Alta en la TS
Devolver ID + Punt TS
Acción Semántica 1:
Devolver a la entrada el último carácter leído
Buscar en la TS
Si está,
Si es PR, devolver la Palabra Reservada
Si no, Devolver ID + Punt TS
Si no está,
Alta en la TS
Devolver ID + Punt TS
Diseño de Compiladores I - Análisis Léxico
Acciones Semánticas
l
A.S. 3
l c–l–d
0 1 F
A.S. 2 A.S. 1
A.S. 3
d
Acción Semántica 2:
Inicializar string (se reserva la máxima longitud permitida para
identificadores)
Agregar letra al string
Acción Semántica 3:
Agregar letra o dígito al string
Acción Semántica 4:
Inicializar string para la constante
Agregar dígito al string
Acción Semántica 5:
Agregar dígito al string
Acción Semántica 6:
Devolver a la entrada el último carácter leído
Verificar rango de la constante
Alta en la TS
Devolver CTE + Punt TS
Diseño de Compiladores I - Análisis Léxico
Constantes
Formas de reconocerlas
Un solo token
Diferentes tokens
Almacenamiento
Tabla de Símbolos
Tabla de Constantes y Literales
‘>’ ‘=‘
0 7 F
otro
otro
1 1 1 F F F F F F F F F F
AS3 AS3 AS1 AS1 AS1 AS1 AS1 AS1 AS1 AS1 AS1 AS1
2 F 2 F F F F F F F F F F
3 F F F 4 F F F F F F F F
4 4 4 4 5 4 4 4 4 4 4 4 F
5 4 4 0 5 4 4 4 4 4 4 4 F
6 F F F F F F F F F F F F
7 F F F F F F F F F F F F
8 F F F F F F F F F F F F
Implementación:
Matriz de punteros a función o equivalente
Acciones:
accion_sem[estado][entrada]
ejecuta la acción semántica
estado = nuevo_estado[estado][entrada]
actualiza el estado actual
Errores
Tira de
tokens
Programa Análisis Análisis Generación Salida
Fuente
Léxico Sintáctico de Código
Tabla
de
Símbolos
Errores
Tira de
tokens
Programa
Fuente
Análisis
Léxico
Análisis
Sintáctico * Generación
de Código
Salida
Tabla
de
Símbolos