Cup y el análisis semántico - Universidad Rey Juan Carlos

Download Report

Transcript Cup y el análisis semántico - Universidad Rey Juan Carlos

Práctica 10/11 – Diap. 1
PROCESADORES DE LENGUAJES
Introducción a la práctica de
Procesadores de Lenguajes
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 2
PROCESADORES DE LENGUAJES
Tres fases
.jflex
.cup
JFLEX
CUP
Tabla de Símbolos, estructuras, etc.
.java
.java
JAVAC
JAVAC
.java
.java
.java
-Errores/Corrección
MLB
Analizador
léxico
Token
Token
Token
Token
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Analizador
Sintáctico
+
semántico
-Traducción
- ... (actuación en
consecuencia)
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 3
PROCESADORES DE LENGUAJES
Tres fases
1
.jflex
.cup
JFLEX
CUP
Tabla de Símbolos, estructuras, etc.
.java
.java
JAVAC
JAVAC
.java
.java
.java
-Errores/Corrección
MLB
Analizador
léxico
Token
Token
Token
Token
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Analizador
Sintáctico
+
semántico
-Traducción
- ... (actuación en
consecuencia)
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 4
PROCESADORES DE LENGUAJES
Tres fases
2
.jflex
JFLEX
.cup
CUP
Tabla de Símbolos, estructuras, etc.
.java
.java
JAVAC
JAVAC
.java
.java
.java
-Errores/Corrección
MLB
Analizador
léxico
Token
Token
Token
Token
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Analizador
Sintáctico
+
semántico
-Traducción
- ... (actuación en
consecuencia)
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 5
PROCESADORES DE LENGUAJES
Tres fases
3
.jflex
JFLEX
.cup
CUP
Tabla de Símbolos, estructuras, etc.
.java
.java
JAVAC
JAVAC
.java
.java
.java
-Errores/Corrección
MLB
Analizador
léxico
Token
Token
Token
Token
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Analizador
Sintáctico
+
semántico
-Traducción
- ... (actuación en
consecuencia)
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 6
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Requisitos
léxicos
.flex
.java
JFLEX
.class
JAVAC
JAVA
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 7
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
%{
.flex
Área de código Java
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 8
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
import java_cup.runtime.Symbol;
import java.io.*;
import java.util.*;
%{
.flex
Área de código Java
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 9
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
%{
.flex
Área de código Java
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 10
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
%standalone
Habilita función “main”, la clase generada será ejecutable
%line
Habilita cuenta de líneas
%{
.flex
Área de%column
código Java
Habilita cuenta de columnas
%}
%cup
Habilita compatibilidad Cup
Macros
%%estados
%%
JFLEX
%class AnalizadorLexico
La clase generada no se llamará Yylex
http://jflex.de/manual.html#SpecOptions
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 11
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
%{
.flex
Área de código Java
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 12
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
letra = [a-zA-Z]
Flags
numero = {cifra}+
%{
.flex
cifra = [0-9]
= {letra}
Área deidentificador
código Java
( {letra} | {numero} | _ )*
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 13
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
%states COMENTARIO
Flags
%{
.flex
Área
%states CADENA
No es necesario declarar aquí el estado inicial por defecto,
YYINITIAL
dellamado
código
Java
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 14
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
%{
.flex
Área de código Java
%}
Macros
%%estados
%%
JFLEX
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 15
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
System.out.println(“Linea: “+yyline);
System.out.println(“Columna: “+yycolumn);
}
%{
.flex
","
{
Área de código Java
%}
{identificador}
{
funcion(yytext(),variable);
Macros
System.out.println(“ID: “+yytext());
}
%%estados
%%
JFLEX
El método “funcion” y la variable “variable” deben estar declarados
en el área de código Java
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 16
PROCESADORES DE LENGUAJES
Tres fases: 1ª, analizador léxico
Importación de paquetes Java
%%
Flags
<YYINITIAL>
{
/* ... */
"/*"
{
%{
.flex
Área de código Java
%}
tipoComentario=2;
yybegin(COMENTARIO);
}
}
Macros
%%estados
<COMENTARIO>
{
"*/"
{
yybegin(YYINITIAL);
%%
JFLEX
}
}
Acciones léxicas
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 17
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
.cup
.flex
Requisitos
sintácticos
JFLEX
.java
JAVAC
1ª fase
.class
CUP
parser
.java
JAVAC
parser
.class
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
JAVA
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 18
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Integración de JFLEX y CUP:
1. Adición del flag “%cup” en la especificación para JFLEX
2. Descarga de CUP desde internet e inserción de su ruta completa en
la variable CLASSPATH del sistema
3. Coordinación de los tipos de tokens que se devuelven en la
especificación JFLEX con los esperados por CUP (declarados en
la especificación para CUP)
“module”
{ System.out.println(“<t_module>"); }
“module”
{ return new Symbol
(sym.t_module, yyline, yycolumn, yytext());
}
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 19
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Caracteres encontrados
en la cadena de entrada
“hola”
“ho\”la”
’a’
’\’’
-.45789EXP3
345.345
-234
true
Token Constante Cadena
Token Constante Cadena
Token Constante Carácter
Token Constante Carácter
Token Constante Real
Token Constante Real
Token Constante Entera
Token Constante Booleana
Contenidos enviados
desde léxico a sintáctico
hola
String
ho”la
a
Character
’
-457.89 Float
345.345
-234
Integer
true
Boolean
Clases Java
de envoltura
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 20
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
parser code {: ... :}
init with {: ... :}
.cup
scan with {: ... :}
Declaración de terminales
Declaración de no terminales
Declaración de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 21
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
import java.io.*;
import java.util.*;
parser code {: ... :}
init with {: ... :}
.cup
scan with {: ... :}
Declaración de terminales
Declaración de no terminales
Declaración de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 22
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
Código que contiene métodos auxiliares y
parser code {: ...
:}
variables,
este código se incrusta en una
clase embebida del parser.
init with {: ... :}
.cup
CUP
scan with {: ... Aquí
:} se declarará una variable global que
acogerá la tabla de símbolos para la fase
de análisis semántico, será directamente
Declaración de terminales
accesible desde las acciones semánticas
Declaración de noque
terminales
se incorporarán a la gramática en dicha
fase. También se podrán declarar métodos
Declaración de precedencias (prohibido)
auxiliares.
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 23
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
.cup
código que flexibiliza el uso del parser,
parser code {: ...
este:}código se incrusta directamente en la
clase parser. Aquí se inserta el método
init with {: ... :}
“main” que arranca la ejecución del
sintáctico.
scan with {: ... analizador
:}
Declaración de terminales
Declaración de no terminales
Declaración de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 24
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
.cup
CUP
public static void main(String args[])
throws Exception
parser code
{:
...
:}
{
try
{
init with {: new
...parser(new
:}
lexico(
new FileReader(args[0]))).parse();
}
scan with {:catch(FileNotFoundException
... :}
e)
{
System.out.println("Archivo no encontrado");
Declaración }de terminales
catch(IOException e){
System.out.println("Error de lectura");
Declaración de
no terminales
e.printStackTrace();
}
catch(Exception e){
Declaración de
precedencias (prohibido)
System.out.println("Excepción.
Pila:");
e.printStackTrace();
}
Gramática }
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 25
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
Son partes opcionales
parser code {: ... :}
.cup
init with: El parser ejecutará el código
init with {: ... aquí
:} introducido antes de pedir el primer
token.
scan with {: ... :}
scan with: código que devolverá símbolos.
Declaración de terminales
Declaración de no terminales
Declaración de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 26
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
Área donde definir todos los símbolos
parser code {: ...
:}
terminales
que aparecerán en la gramática.
init with {: ...
.cup
scan with {: ...
terminal
terminal
:}
terminal
terminal
:}
...
t_module;
t_end;
t_operador_suma;
t_puntocoma;
Declaración de terminales
Declaración de no terminales
En la especificación para JFLEX:
“module”
CUP
Declaración de precedencias
(prohibido)
{
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
return new Symbol(sym.t_module,
yyline, yycolumn, yytext());
}
...
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 27
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
Área donde definir todos los símbolos
parser code {: ...
no :}
terminales de los que consta la
gramática.
init with {: ... non
:}
.cup
scan with {: ...
terminal PROGRAMA;
non terminal DECLARACIONES;
non
:} terminal DECL_VAR;
...
Declaración de terminales
Declaración de no terminales
Declaración de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 28
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
parser code {: ... :}
init with {: ... :}
.cup
scan with {: ... :}
Declaración de terminales
Declaración de no terminales
Declaración de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 29
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
PROGRAMA ::=
parser code
{: ... t_id
:} t_integerv DECLARACIONES
t_module
t_end t_id t_puntocoma PROGRAMA {: :} |
init with {: ... :}
.cup
t_module t_id t_integerv DECLARACIONES
scan with {:
...t_id
:} t_puntocoma {: :} ;
t_end
DECLARACIONES
::=
Declaración
de terminales
CUP
DECL_VAR t_puntocoma DECLARACIONES {: :} |
DECL_FUN
DECLARACIONES {: :} |
Declaración
de no terminales
DECL_VAR t_puntocoma {: :} |
DECL_FUN
{: :} ;
Declaración
de precedencias
(prohibido)
...
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 30
PROCESADORES DE LENGUAJES
Tres fases: 2ª, analizador sintáctico
Importación de paquetes Java
action code {: ... :}
{: :}
parser
code {: ... :}
Son acciones semánticas. Aparecen siempre al final de cada regla. En ellas
se insertará código Java en la tercera fase, la del análisis semántico. Ahora
initen with
{:fase
...
:} falta ni siquiera insertarlas en la gramática:
la segunda
no hace
.cup
PROGRAMA ::=
scan with {: ... :}
t_module t_id t_integerv DECLARACIONES
t_end
t_id t_puntocoma PROGRAMA |
Declaración
de terminales
t_module
t_id t_integerv DECLARACIONES
Declaración
de no terminales
t_end t_id t_puntocoma ;
...
Declaración
de precedencias (prohibido)
CUP
Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 31
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
.cup
.flex
Requisitos
semánticos
Acciones
semánticas
JFLEX
.java
JAVAC
1ª fase
.class
CUP
parser
.java
JAVAC
parser
.class
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
JAVA
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 32
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
exp::= exp opSuma exp {:acción semántica:}
exp
-Uso de identificadores (¿declarados?)
-Variables asignadas antes de usar
-Índices de array dentro de rango válido
-Operandos adecuados en expresiones
-Invocación correcta de funciones y
procedimientos
exp
opSuma
exp
-Tipo de valor de retorno adecuado en
funciones
-...
Cup implementa un analizador sintáctico ascendente, no se
manejarán atributos heredados
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 33
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
...
terminal
terminal
non terminal
...
// Gramática
...
DECL ::= T LID
int, float, semicolon, comma;
id;
DECL, LID, T;
semicolon {:
int v1, x, indice;
// Introducir en tabla de
// símbolos realizando las
// comprobaciones necesarias :};
T ::= int | float;
LID ::= id comma LID
| id ;
...
// Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 34
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
...
terminal
terminal
non terminal
...
// Gramática
...
DECL ::= T LID
int, float, semicolon, comma;
id;
DECL, LID, T;
int v1, x, indice;
semicolon {:
// Introducir en tabla de
// símbolos realizando las
// comprobaciones necesarias :};
T ::= int {: T.tipo = int :} | float {: T.tipo = float :} ;
LID ::= id comma LID
| id ;
...
// Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 35
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
...
terminal
terminal
non terminal
non terminal
int, float, semicolon, comma;
id;
DECL, LID;
int v1, x, indice;
Dato T;
...
DECL ::= T LID semicolon {:
T ::= int {:
// Introducir en tabla de
// símbolos realizando las
// comprobaciones necesarias :};
Dato miDato=new Dato();
miDato.setTipo(Dato.T_INT);
RESULT= miDato; :} |
float {: ... :} ;
LID ::= id comma LID
| id ;
...
// Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 36
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
...
terminal
terminal
non terminal
non terminal
int, float, semicolon, comma;
id;
DECL, LID;
int v1, x, indice;
Dato T;
...
DECL ::= T LID semicolon {:
// Introducir en tabla de
// símbolos realizando las
// comprobaciones necesarias :};
T ::= int {: ... :} | float {: ... :} ;
LID ::= id comma LID1 {: LID.lista = LID1.lista.add(id) :}
| id {: LID.lista = nuevaLista(id) :} ;
...
// Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 37
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
...
terminal
terminal
non terminal
non terminal
non terminal
...
DECL ::= T LID
int, float, semicolon, comma;
id;
DECL;
int v1, x, indice;
ArrayList<String> LID;
Dato T;
semicolon {:
// Introducir en tabla de
// símbolos realizando las
// comprobaciones necesarias :};
T ::= int {: ... :} | float {: ... :} ;
LID ::= id:ident comma LID:lista{:lista.add(ident);RESULT = lista;:}
| id:ident {:
ArrayList<String> miLista = new ArrayList<String>();
miLista.add(ident);
RESULT = miLista; :} ;
...
// Gramática
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Antonio Pérez Carrasco. Curso 2010-2011
PROCESADORES DE LENGUAJES
Práctica 10/11 – Diap. 38
Tres fases: 3ª, analizador semántico
public class Dato
{
final int T_INT = 1;
final int T_FLOAT = 2;
...
int tipo;
// Entero, Float...
int clase;
// Var. local, método, clase...
...
public Dato()
{
//...
}
public void setTipo(int valorTipo)
{
this.tipo=valorTipo;
}
...
}
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Clase Dato.java
Permite subir información a
través de la gramática y de sus
símbolos no terminales
Debe implementarse a medida
de las necesidades que se
encuentren durante el
desarrollo de la práctica
Antonio Pérez Carrasco. Curso 2010-2011
Práctica 10/11 – Diap. 39
PROCESADORES DE LENGUAJES
Tres fases: 3ª, analizador semántico
Archivo .LEX
{id}
{return new Symbol(sym.id,yyline,yycolumn,yytext());}
______________
class Symbol {
...
int left;
int right;
Object value;
...
}
En la gramática de CUP:
id:ident
Origen: léxico
Destino: sintáctico
Universidad Rey Juan Carlos, ETSII – Dpto. Lenguajes y Sistemas Informáticos 1
Acceso a atributo value de la
instancia de la clase Symbol
dada por el analizador léxico
Antonio Pérez Carrasco. Curso 2010-2011