Está en la página 1de 3

package analisis;

import java_cup.runtime.*;
import analisis.Estructura.Documento;
import analisis.Estructura.Carpeta;
action code{:
public static Estructura miEstructura = new Estructura();
Documento miDocumento = new Documento();
Carpeta miCarpeta = new Carpeta();
Carpeta tempCarpeta = new Carpeta();
:};
parser code
{:
public static Estructura getEstructura(){
return CUP$sintactico$actions.miEstructura;
}
public static void cleanEstructura(){
CUP$sintactico$actions.miEstructura.arrayCarpetas.clear();
CUP$sintactico$actions.miEstructura.arrayDocumentos.clear();
}
public void syntax_error(Symbol s) throws java.lang.Exception{
System.out.println("Error en la Linea " + (s.right+1)+ "Columna
"+s.left+". Identificador " + s.value + " no reconocido.");
}
public void unrecovered_syntax_error(Symbol s) throws java.lang.Exceptio
n{
System.out.println("*Error en la Linea " + (s.right+1)+ "Columna
"+s.left+". Identificador " + s.value + " no reconocido.");
}
:}
/*---------------------------------TERMINALES------------------------------*/
terminal INICIO,FIN,DATO,TODO,ENTER;
terminal IDIRECTORIO,DIRECTORIO;
terminal IDOCUMENTO,DOCUMENTO;
terminal IFORMATO,FORMATO;
terminal ICONTENIDO,CONTENIDO;
terminal ICARPETA,CARPETA;
terminal INOMBRE,NOMBRE;
/*-------------------------------NO TERMINALES----------------------------*/
non terminal programa,instrucciones,instruccion;
non terminal carp,carpeta,doc,documento,directorio;
non terminal tempC,tempCC,tempC2,tempCC2,tempD,tempDD,tempD2,tempDD2;
/*-----------------------ESTRUCTURA DE PROGRAMA---------------------------*/
start with programa;
programa ::= INICIO ENTER instrucciones ENTER FIN | INICIO ENTER instrucciones E
NTER FIN ENTER | ENTER INICIO ENTER instrucciones ENTER FIN | ENTER INICIO ENTER
instrucciones ENTER FIN ENTER |
INICIO instrucciones FIN ENTER | ENTER INICIO instrucci
ones FIN | ENTER INICIO instrucciones FIN ENTER;
instrucciones ::= instrucciones ENTER instruccion | instrucciones instruccion |
instruccion;
instruccion ::= carp|doc|directorio;

doc ::= IDOCUMENTO ENTER tempD2 ENTER DOCUMENTO {:


Documento auxD = new Documento();
auxD.nombre = miDocumento.nombre;
auxD.formato = miDocumento.formato;
auxD.contenido = miDocumento.contenido;
miEstructura.arrayDocumentos.add(auxD);
:} | IDOCUMENTO tempD2 DOCUMENTO {:
Documento auxD = new Documento();
auxD.nombre = miDocumento.nombre;
auxD.formato = miDocumento.formato;
auxD.contenido = miDocumento.contenido;
miEstructura.arrayDocumentos.add(auxD);
:};
tempD2 ::= tempD2 ENTER tempDD2 | tempD2 tempDD2 | tempDD2;
tempDD2 ::= INOMBRE DATO:nom NOMBRE {:
miDocumento.nombre = nom.toString();
:} | IFORMATO DATO:form FORMATO {:
miDocumento.formato = form.toString();
:} | ICONTENIDO TODO:con CONTENIDO {:
miDocumento.contenido = con.toString();
:} |
INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
miDocumento.nombre = nom2.toString();
:} | IFORMATO ENTER DATO:form2 ENTER FORMATO {:
miDocumento.formato = form2.toString();
:} | ICONTENIDO ENTER TODO:con2 ENTER CONTENIDO {:
miDocumento.contenido = con2.toString();
:} ;
carp ::= ICARPETA ENTER tempC ENTER CARPETA {:
Carpeta auxC = new Carpeta();
auxC.nombre = miCarpeta.nombre;
auxC.arrayDocs = miCarpeta.arrayDocs;
miEstructura.arrayCarpetas.add(auxC);
:} | ICARPETA tempC CARPETA {:
Carpeta auxC = new Carpeta();
auxC.nombre = miCarpeta.nombre;
auxC.arrayDocs = miCarpeta.arrayDocs;
miEstructura.arrayCarpetas.add(auxC);
:};
tempC ::= tempC ENTER tempCC | tempC tempCC | tempCC;
tempCC ::= INOMBRE DATO:nom NOMBRE {:
miCarpeta.nombre = nom.toString();
:} | INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
miDocumento.nombre = nom2.toString();
:} | documento | carpeta;
carpeta ::= ICARPETA ENTER tempC2 ENTER CARPETA {:
Carpeta auxC = new Carpeta();
auxC.nombre = miCarpeta.nombre;
auxC.arrayDocs = miCarpeta.arrayDocs;
miCarpeta.arrayCarpetas.add(auxC);
:} | ICARPETA tempC2 CARPETA {:
Carpeta auxC = new Carpeta();
auxC.nombre = miCarpeta.nombre;
auxC.arrayDocs = miCarpeta.arrayDocs;

miEstructura.arrayCarpetas.add(auxC);
:};
tempC2 ::= tempC2 ENTER tempCC2 | tempC2 tempCC2 | tempCC2;
tempCC2 ::= INOMBRE DATO:nom NOMBRE {:
miCarpeta.nombre = nom.toString();
:} | INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
miDocumento.nombre = nom2.toString();
:} | documento | carpeta;
documento ::= IDOCUMENTO ENTER tempD ENTER DOCUMENTO {:
Documento auxD = new Documento();
auxD.nombre = miDocumento.nombre;
auxD.formato = miDocumento.formato;
auxD.contenido = miDocumento.contenido;
miCarpeta.arrayDocs.add(auxD);
:} | IDOCUMENTO tempD DOCUMENTO{:
Documento auxD = new Documento();
auxD.nombre = miDocumento.nombre;
auxD.formato = miDocumento.formato;
auxD.contenido = miDocumento.contenido;
miCarpeta.arrayDocs.add(auxD);
:};
tempD ::= tempD ENTER tempDD | tempD tempDD | tempDD;
tempDD ::= INOMBRE DATO:nom NOMBRE {:
miDocumento.nombre = nom.toString();
:} | IFORMATO DATO:form FORMATO {:
miDocumento.formato = form.toString();
:} | ICONTENIDO TODO:con CONTENIDO {:
miDocumento = con.toString();
:} |
INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
miDocumento.nombre = nom2.toString();
:} | IFORMATO ENTER DATO:form2 ENTER FORMATO {:
miDocumento.formato = form2.toString();
:} | ICONTENIDO ENTER TODO:con2 ENTER CONTENIDO {:
miDocumento = con2.toString();
:} ;
directorio ::= IDIRECTORIO TODO:dir DIRECTORIO{:
miEstructura.directorio = dir.toString();
:} | IDIRECTORIO ENTER TODO:dir2 ENTER DIRECTORIO{:
miEstructura.directorio = dir2.toString();
:} ;

También podría gustarte