package analisis;
import java_cup.runtime.*;
import [Link];
import [Link];
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$[Link];
}
public static void cleanEstructura(){
CUP$sintactico$[Link]();
CUP$sintactico$[Link]();
}
public void syntax_error(Symbol s) throws [Link]{
[Link]("Error en la Linea " + ([Link]+1)+ "Columna
"+[Link]+". Identificador " + [Link] + " no reconocido.");
}
public void unrecovered_syntax_error(Symbol s) throws [Link]
n{
[Link]("*Error en la Linea " + ([Link]+1)+ "Columna
"+[Link]+". Identificador " + [Link] + " 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();
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](auxD);
:} | IDOCUMENTO tempD2 DOCUMENTO {:
Documento auxD = new Documento();
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](auxD);
:};
tempD2 ::= tempD2 ENTER tempDD2 | tempD2 tempDD2 | tempDD2;
tempDD2 ::= INOMBRE DATO:nom NOMBRE {:
[Link] = [Link]();
:} | IFORMATO DATO:form FORMATO {:
[Link] = [Link]();
:} | ICONTENIDO TODO:con CONTENIDO {:
[Link] = [Link]();
:} |
INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
[Link] = [Link]();
:} | IFORMATO ENTER DATO:form2 ENTER FORMATO {:
[Link] = [Link]();
:} | ICONTENIDO ENTER TODO:con2 ENTER CONTENIDO {:
[Link] = [Link]();
:} ;
carp ::= ICARPETA ENTER tempC ENTER CARPETA {:
Carpeta auxC = new Carpeta();
[Link] = [Link];
[Link] = [Link];
[Link](auxC);
:} | ICARPETA tempC CARPETA {:
Carpeta auxC = new Carpeta();
[Link] = [Link];
[Link] = [Link];
[Link](auxC);
:};
tempC ::= tempC ENTER tempCC | tempC tempCC | tempCC;
tempCC ::= INOMBRE DATO:nom NOMBRE {:
[Link] = [Link]();
:} | INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
[Link] = [Link]();
:} | documento | carpeta;
carpeta ::= ICARPETA ENTER tempC2 ENTER CARPETA {:
Carpeta auxC = new Carpeta();
[Link] = [Link];
[Link] = [Link];
[Link](auxC);
:} | ICARPETA tempC2 CARPETA {:
Carpeta auxC = new Carpeta();
[Link] = [Link];
[Link] = [Link];
[Link](auxC);
:};
tempC2 ::= tempC2 ENTER tempCC2 | tempC2 tempCC2 | tempCC2;
tempCC2 ::= INOMBRE DATO:nom NOMBRE {:
[Link] = [Link]();
:} | INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
[Link] = [Link]();
:} | documento | carpeta;
documento ::= IDOCUMENTO ENTER tempD ENTER DOCUMENTO {:
Documento auxD = new Documento();
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](auxD);
:} | IDOCUMENTO tempD DOCUMENTO{:
Documento auxD = new Documento();
[Link] = [Link];
[Link] = [Link];
[Link] = [Link];
[Link](auxD);
:};
tempD ::= tempD ENTER tempDD | tempD tempDD | tempDD;
tempDD ::= INOMBRE DATO:nom NOMBRE {:
[Link] = [Link]();
:} | IFORMATO DATO:form FORMATO {:
[Link] = [Link]();
:} | ICONTENIDO TODO:con CONTENIDO {:
miDocumento = [Link]();
:} |
INOMBRE ENTER DATO:nom2 ENTER NOMBRE {:
[Link] = [Link]();
:} | IFORMATO ENTER DATO:form2 ENTER FORMATO {:
[Link] = [Link]();
:} | ICONTENIDO ENTER TODO:con2 ENTER CONTENIDO {:
miDocumento = [Link]();
:} ;
directorio ::= IDIRECTORIO TODO:dir DIRECTORIO{:
[Link] = [Link]();
:} | IDIRECTORIO ENTER TODO:dir2 ENTER DIRECTORIO{:
[Link] = [Link]();
:} ;