Académique Documents
Professionnel Documents
Culture Documents
Analizador Lxico.
4 scanners:
2 implementados a mano (grupos 4 y 11)
1 implementado con Coco/R (grupo 3)
1 implementado con JFlex (grupo 1)
Analizador Lxico.
Tipos de tokens generados:
Palabras Reservadas
Atributo: Puntero a la Tabla de Smbolos
Ejemplos: FOR, IF, WITH
Identificadores
Atributo: Puntero a la Tabla de Smbolos
Ejemplos: variable, nota, casa
Operadores comparacin
Atributo: Tipo Enumerado
Ejemplos: <,<=,>,>=,!=,=
Operador Asignacin
Atributo: Nada
Ejemplos: :=
Operador Unitario
Atributo: Enumerado
Analizador Lxico.
Tipos de tokens generados:
Operadores Aditivos
Atributo: Tipo Enumerado
Ejemplos: +, Operadores Multiplicativos
Atributo: Tipo Enumerado
Ejemplos: *, /
Nmero Entero (octal y hexadecimal)
Atributo: Valor numrico
Ejemplos: 1, 56
Nmero Real
Atributo: Valor numrico
Ejemplos: 1.2, 56.7893
EOF
Analizador Lxico.
Tipos de tokens generados:
Cadenas de caracteres
Atributo: Puntero a la tabla de smbolos
Ejemplos: "Hola mundo", "adios"
Carcter (en octal)
Atributo: Carcter
Ejemplos: a, b, z, 3
Puntuacin
Atributo: Tipo enumerado
Ejemplos: ;, (, ]
Funcin predefinida
Atributo:Tipo enumerado
Procedimiento predefinido
Atributo:Tipo enumerado
Analizador Lxico.
Analizador Lxico.
Herramienta utilizada: JFlex.
JFlex es un generador de scanners para Java,
implementado tambin en Java, que genera un
analizador lxico de manera rpida y sencilla,
independientemente de la plataforma que
utilicemos a la hora de programar.
Genera AFD.
Analizador Lxico.
Herramienta utilizada: JFlex.
Se utilizan:
- PATRONES
- ESTADOS
- FUNCIONES
- Cdigo Java empotrado
Diseo de la tabla de
smbolos
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
BEGIN
b := 1 + c;
END p;
BEGIN
incrementar(c);
END mod1.
BEGIN
a := c;
END mod0.
Lista de exportadas
null
mod0
Lexema
Tipo
INTEGE
R
Valor
Conteni
do
contine
nte
N args
Tipo
args
Paso
args
Mod
padre
null
null
Null
Null
Null
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
BEGIN
b := 1 + c;
END p;
BEGIN
incrementar(c);
END mod1.
BEGIN
a := c;
END mod0.
Lista de exportadas
null
mod0
Lexema
Tipo
INTEGE
R
mod1
MODUL
E
Valor
Conteni
do
contine
nte
N args
Tipo
args
Paso
args
Mod
padre
null
null
Null
Null
Null
Null
Null
Null
Null
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
BEGIN
b := 1 + c;
END p;
BEGIN
incrementar(c);
END mod1.
Puntero a la
tabla de
simbolos de
mod1
BEGIN
a := c;
END mod0.
Lista de exportadas
null
mod0
Lexema
Tipo
Valor
Conteni
do
contine
nte
N args
Tipo
args
Paso
args
Mod
padre
INTEGE
R
Null
Null
null
Null
Null
Null
mod1
MODUL
E
Null
Null
Null
Null
Null
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
Puntero a la
tabla de
simbolos de
mod0
BEGIN
b := 1 + c;
END p;
BEGIN
incrementar(c);
END mod1.
Puntero a la
tabla de
simbolos de
incrementar
BEGIN
a := c;
Lista de exportadas
END mod0.
{c}
mod1
Lexema
Tipo
Valor
Conteni
do
contine
nte
N args
Tipo
args
Paso
args
INTEGE
R
Null
Null
Null
Null
Null
INTEGE
R
Null
Null
Null
Null
Null
Increme
ntar
PROCE
DURE
Null
Null
{INTEG
ER}
{VALOR
}
Mod
padre
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
BEGIN
Puntero a la
tabla de
smbolos de
mod1
b := 1 + c;
END p;
BEGIN
incrementar(c);
END mod1.
BEGIN
a := c;
Lista de exportadas
END mod0.
null
Tipo
Valor
Conteni
do
INTEGE
R
Null
Null
contine
nte
N args
Tipo
args
Paso
args
Mod
padre
Null
Null
Null
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
Puntero a la
tabla de
simbolos de
mod0
BEGIN
b := 1 + c;
END p;
BEGIN
incrementar(c);
END mod1.
Puntero a la
tabla de
simbolos de
incrementar
BEGIN
a := c;
END mod0.
Lista de exportadas
{c}
mod1
Lexema
Tipo
Valor
Conteni
do
contine
nte
N args
Tipo
args
Paso
args
INTEGE
R
Null
Null
Null
Null
Null
INTEGE
R
Increme
ntar(c)
Null
Null
Null
Null
Increme
ntar
PROCE
DURE
Null
Null
{INTEG
ER}
{VALOR
}
Mod
padre
Diseo de la tabla de
smbolos
MODULE mod0;
VAR a : INTEGER;
MODULE mod1
VAR b,c: INTEGER
EXPORT c;
PROCEDURE incrementar (VAR &c : INTEGER);
BEGIN
b := 1 + c;
END p;
BEGIN
Puntero a la
tabla de
simbolos de
mod1
incrementar(c);
END mod1.
BEGIN
a := c;
END mod0.
Lista de exportadas
null
mod0
Lexema
Tipo
Valor
Conteni
do
contine
nte
N args
Tipo
args
Paso
args
Mod
padre
INTEGE
R
Valor de
c
null
null
Null
Null
Null
mod1
MODUL
E
Null
Null
Null
Null
Null
INTEGE
R
Null
Null
Null
Null
Null
c(export
ado de
mod1)
Inserta_Clave(String,Tipo_Token)
Token=(Tipo_Token,Atrib)
El analizador lxico llamar a esta funcin
para insertar nuevos identificadores
Busca_Clave(String)
Busca la cadena que se le pasa como
parmetro en la tabla de smbolos
^TS CreaTabla(^TS) :
Devuelve un puntero a la nueva tabla
creada, y se le pasa como parmetro el
puntero de la tabla padre
^TS CierraTabla(^TS):
Devuelve un puntero a la nueva tabla
activa, que ser la que era continente de
la del parmetro ^TS
Diagrama de clases
Analizador sintctico.
Analizador sintctico.
Gramtica.
Factorizada y sin recursin por la izquierda, LL(1).
Sigue unas reglas de notacin que ayudan al mejor
entendimiento y legibilidad de la misma:
-No terminales siguen el estilo de los identificadores
de Java.
Ejemplo: noTerminal, otroNoTerminal.
-Los identificadores de los smbolos terminales
aparecen con todas sus letras en maysculas
Ejemplo: TERMINAL, OTROTERMINAL
-Cada produccin debe ir en una nueva lnea. Las
producciones con distinta parte izquierda deben estar
separadas por al menos un salto de lnea.
-El smbolo vaco se representa por _epsilon_
Analizador sintctico.
Analizador sintctico.
Diagrama de clases
Analizador semntico.
Analizador semntico.
- Se distinguien dos tipos de anlisis semntico:
- Esttico
- Comprobacin de tipos
- Comprobaciones asociadas al flujo del control
- Comprobaciones de unicidad
- Comprobaciones relativas a nombres
- Dinmico
- Recorreremos en un determinado orden y calcularemos en cada nodo
la informacin semntica necesaria. (1 sola pasada)
-
Analizador semntico.
Herramientas utilizadas
- No ha sido necesaria considerar otras.
- SLK.
Se ha elegido la herramienta SLK ya que fue la utilizada
para el anlisis sintctico, de modo que la salida de esta fase
se convierte en la entrada de la fase del anlisis semntico.
Inconvenientes:
- No tener control sobre el cdigo generado.
SLK toma como entrada una gramtica LL(1) en formato
EBNF. Las clases que debemos implementar para esta fase
es la SLKAction, adems de otras propias.
Analizador semntico.
Analizador semntico.
Generacin de cdigo
intermedio.
Especificacin y diseo
- El generador de cdigo ensamblador se ha implementado como
complemento al resto de actividades sintcticas dentro de las
acciones semnticas ofrecidas por la herramienta SLK.
- La generacin es empotrada, por tanto, con la diferenciacin de
que ha sido implementada una nueva clase, Generador, que ser la
que genere el cdigo propiamente dicho y presente una interfaz
amigable dentro de las acciones definidas previamente.
- La generacin de cdigo se produce en las acciones semnticas
que proceda, obteniendo un fichero de salida con los resultados.
Generacin de cdigo
intermedio.
Herramientas utilizadas
- Uno de los propuestos en clase
- ENS2001.
- Integra la funcin de Ensamblador, de un subconjunto de
instrucciones del estndar IEEE 694.
- Tiene un Simulador, ya que es capaz de ejecutar programas
ensamblados para dicha implementacin particular del estndar.
Generacin de cdigo
intermedio.