Habilidades Motrices Básicas de manera didáctica para niños
Análisis Semántico con Cup
1. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 1
Cup y el análisis semántico
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 2
Hasta ahora...
Analizador Analizador
léxico sintáctico
.txt .flex .cup
Fichero fuente Lee lexemas, asocia a Comprueba validez de la
(tablas y patrones, genera tokens cadena de tokens
consultas)
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
1
2. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 3
Desde ahora...
Analizador
Analizador sintáctico
léxico +
semántico
.txt .flex .cup
Fichero fuente Lee lexemas, asocia a Comprueba validez de la
(tablas y patrones, genera tokens cadena de tokens
consultas)
Comprueba tipos y
existencias, se ayuda de la
tabla de símbolos
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 4
Especificación Cup
import ...;
action code {: ... :}
parser code {: ... :}
init with {: ... :}
scan with {: ... :}
terminal ...;
non terminal ...;
precedence ...;
gramática
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
2
3. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 5
Especificación Cup
import ...; Importación de paquetes
necesarios para poder desarrollar
action code {: ... :} el código Java
parser code {: ... :}
init with {: ... :}
scan with {: ... :}
terminal ...;
non terminal ...;
precedence ...;
gramática
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 6
Especificación Cup
import ...; Son áreas opcionales.
Action code: código que contiene
action code {: ... :} métodos auxiliares y variables
parser code {: ... :} empleados por el código
init with {: ... :} incrustado en la gramática, este
scan with {: ... :} código se incrusta en una clase
embebida del parser.
terminal ...; Parser code: código que flexibiliza
non terminal ...; el uso del parser, este código se
incrusta directamente en la clase
precedence ...; parser.
gramática
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
3
4. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 7
Especificación Cup
import ...; Son áreas opcionales.
Init with: El parser ejecutará el
action code {: ... :} código aquí introducido antes de
parser code {: ... :} pedir el primer token.
init with {: ... :} Inicializaciones, instanciaciones...
scan with {: ... :} Scan with: código que devolverá
símbolos.
terminal ...;
non terminal ...;
precedence ...;
gramática
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 8
Especificación Cup
import ...; Área donde definir todos los
símbolos que aparecerán en la
action code {: ... :} gramática.
parser code {: ... :} Se les puede asignar un tipo
init with {: ... :} (clase) para ajustarlos a las
scan with {: ... :} necesidades del analizador.
Para evitar ambigüedades, se
terminal ...; deben definir precedencias.
non terminal ...;
precedence ...;
gramática
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
4
5. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 9
Especificación Cup
import ...; Se define la especificación sintáctica
y se incluyen los atributos y las
action code {: ... :} acciones semánticas que permiten
parser code {: ... :} manejar los símbolos leídos y realizar
las acciones oportunas
init with {: ... :}
(comprobaciones, inserciones...)
scan with {: ... :} sobre la tabla de símbolos
terminal ...;
non terminal ...; G.I.C. con atributos + A.Semánticas
= Traductor dirigido por la sintaxis
precedence ...;
gramática
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 10
Especificación Cup
expr::= expr PLUS expr
{: acción semántica :}
-Uso de identificadores (¿declarados?)
expr
-Variables asignadas antes de usar
-Índices de array dentro de rango válido
-Operandos adecuados en expresiones
-Invocación correcta de métodos
-Tipo de valor de retorno adecuado en
método
expr PLUS expr -...
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
5
6. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 11
Especificación Cup: gramática
...
terminal int, float, id, semicolon, comma;
non terminal DECL, T, LID;
int v1, x, indice;
...
// Gramática
...
DECL ::= T LID semicolon;
T ::= int {: T.tipo = int :}
| float {: T.tipo = float :} ;
LID ::= id comma LID
| id ;
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 12
Especificación Cup: gramática
...
terminal int, float, id, semicolon, comma;
non terminal DECL, LID;
non terminal Simbolo T; int v1, x, indice;
...
// Gramática
...
DECL ::= T LID semicolon;
T ::= int {: Simbolo miSimbolo=new Simbolo();
miSimbolo.setTipo(Simbolo.T_INT);
RESULT= miSimbolo; :}
| float {: Simbolo miSimbolo =new Simbolo();
miSimbolo.setTipo(Simbolo.T_FLOAT);
RESULT= miSimbolo; :} ;
LID ::= id comma LID
| id ;
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
6
7. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 13
Especificación Cup: gramática
...
terminal int, float, id, semicolon, comma;
non terminal DECL, LID;
int v1, x, indice;
non terminal Simbolo T;
...
// Gramática
...
DECL ::= T LID semicolon;
T ::= int {: ... :}
| float {: ... :} ;
LID ::= id comma LID {: LID.lista = LID.lista.add(id) :}
| id {: LID.lista = nuevaLista(id) :} ;
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 14
Especificación Cup: gramática
...
terminal int, float, semicolon, comma;
terminal String id;
non terminal DECL; non terminal ArrayList<String> LID;
non terminal Simbolo T;
... int v1, x, indice;
// Gramática
...
DECL ::= T LID semicolon;
T ::= int {: ... :}
| float {: ... :} ;
LID ::= id:ident comma LID:l {: l.add(ident);RESULT = l;:}
| id:ident {: ArrayList<String> lista=new
ArrayList<String>();
lista.add(ident);
RESULT = lista; :} ;
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
7
8. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 15
Especificación Cup: gramática
...
terminal int, float, semicolon, comma;
terminal String id;
non terminal DECL; non terminal ArrayList LID;
non terminal Simbolo T; EJERCICIO
int v1, x, indice;
... Implementar la acción semántica:
// Gramática - Comprobando que no hay repeticiones
... - Realizando inserción en tabla de símbolos
DECL ::= T LID semicolon {: // Introducir en tabla de
// símbolos realizando las
// comprobaciones necesarias :};
T ::= int {: ... :} | float {: ... :} ;
LID ::= id:ident comma LID:l {: ... :}
| id:ident {: ... :} ;
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 16
Especificación Cup: gramática
...
terminal PLUS, MINUS, TIMES, DIV, AND, OR, CONCAT;
non terminal Simbolo expr;
...
// Gramática
...
expr::= expr:e1 PLUS expr:e2
{:
//...
:} | expr1:e1 AND expr:e2
{:
//...
:};
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
8
9. PROCESADORES DE LENGUAJES Cup y el análisis semántico – Diap. 17
public class Simbolo
{
final int T_INT = 1; Clase “Simbolo.java”
final int T_FLOAT = 2;
...
int tipo; // Entero, Float...
int clase; // Var. local, método, clase...
public Simbolo()
{
//...
}
public void setTipo(int valorTipo)
{
this.tipo=valorTipo;
}
public int getTipo()
{
return this.tipo;
}
...
}
Universidad Rey Juan Carlos, Área de Lenguajes y Sistemas. Antonio Pérez Carrasco. Curso 2008-2009
9