Professional Documents
Culture Documents
import java.io.*;
String nombre;
analizador parser;
System.out.print("RUTA DEL ARCHIVO A ANALIZAR: ");
try
{
nombre=Nuevo.readLine();
}
catch(IOException e)
{
System.out.println("No se encontro ningun archivo");
return;
}
try
{
parser = new analizador(new FileInputStream(nombre));
}
catch(FileNotFoundException e)
{
return;
}
t = parser.getNextToken();
System.out.println("\nEXPRESION\t\tCOMPONENTE LEXICO\n");
else
{
error = 1;
try
{
t = parser.getNextToken();
}
catch(TokenMgrError e1)
{
System.out.println("Error de lexico en la
linea "+(t.beginLine+1)+"\n el caracter no se encontro");
crash=1;
return;
}
if(error == 0)
{
System.out.println(TokenMgrError.addEscapes(t.image) + "\t\t"+ opc);
}
else
{
error = 1;
}
try
{
t = parser.getNextToken();
}
catch(TokenMgrError e)
{
System.out.println("Error de lexico en la
linea "+(t.beginLine+1)+"\n el caracter no se encontro");
crash=1;
return;
}
try
{
parser.ReInit(new FileInputStream(nombre));
}
catch(FileNotFoundException e)
{
System.out.println("El archivo "+nombre+" no se
encuentra");
return;
}
}
}
PARSER_END (analizador)
/* PALABRAS RESERVADAS */
TOKEN:
{
<CLASE: "@NCLASE">
| <NEW: "@NPAQUETE">
| <MAIN: "@NMENU">
| <TRUE: "@NPASS">
| <FALSE: "@NSTOP">
| <WRITE: "@NLETTER">
| <READ: "@NBOOK">
| <VOID: "@NDISPLAY">
| <NULL: "@NNO">
| <USING: "@NUSE">
| <PROGRAMA: "@NEXE">
}
/* COMENTARIOS */
TOKEN:
{
<COMMENT: "//">
}
/* IDENTIFICADOR */
TOKEN:
{
<ID: (["a"-"z"]|["A"-"Z"]|"�"|"�"|"_")+(["0"-"9"])*>
}
/* NUMEROS */
TOKEN:
{
<NUM_REAL:["0"-"9"]+>
|<NUM_DEC:(["0"-"9"])+ "." (["0"-"9"])+>
}
/* SIGNOS DE AGRUPACION*/
TOKEN:
{
<PABRE: "(">
| <PCIERRA: ")">
| <CORABRE: "[">
| <CORCIERRA: "]">
| <LLVABRE: "{">
| <LLVCIERRA: "}">
/* OPERADORES RELACIONALES */
TOKEN:
{
<MAYQ: "N>">
| <MENQ: "N<">
| <MAYIG: "N>=">
| <MENIG: "N<=">
| <IGIG: "NN==">
}
/* OPERADORES LOGICOS*/
TOKEN:
{
<AND: "@NN">
| <OR: "@OO">
| <NOT: "@NOD">
}
/* SIMBOLO ASIGNACION*/
TOKEN:
{
<IG: "=">
}
/* OPERADORES ARITMETICOS*/
TOKEN:
{
<SUM: "+">
| <RES: "-">
| <MUL: "*">
| <DIV: "/">
}
/* OPERADORES CONDICIONALES */
TOKEN:
{
<IF:"N^_^">
|<ELSE:"N:(">
|<THEN:"N:D">
|<BREAK:"N:/">
|<DEFULT:"N:)">
|<CASE: "N^O)">
}
/* CICLOS */
TOKEN:
{
<FOR: "@4TH">
| <WHILE: "@WILL">
| <DO: "@DU">
}
/* TIPOS DE DATOS*/
TOKEN:
{
<INT: "@NI">
| <DOUBLE: "@NMI">
| <TEXT: "@NTEXT">
| <BOOL: "@NBU">
}
/* FINALIZADOR DE SENTENCIA */
TOKEN:
{
<PNTYCOM: ";">
}
TOKEN:
{
<ERROR: "([<NUM_REAL>|<NUM_DEC>])+([<ID>])+)">
/* ESPACIOS EN BLANCO */
SKIP:
{
" "
|"\r"
|"\t"
|"\n"
}
void Programa () : {}
{
<PROGRAMA><CORABRE>EJECUTANDOSE()<CORCIERRA><EOF>
}
void EJECUTANDOSE() :{}
{
<MAIN><LLVEABRE>CTIPO ()<ID><PNTYCOMA>ORDEN()<LLVECIERRA>
}
void ORDEN():{}
{
<IF>|<ELSE>
}*
void CTIPO():{}
{
<INT>|<DOUBLE>|<TEXT>|<BOOL>
}
void CIF():{}
{
<IF><CORABRE>DATO ()<CORCIERRA>
}
void DATO ():{}
{
CVALOR () SIMB () CVALOR ()
}
void CELSE():{}
{
<ELSE><CORABRE>DATO () <CORCIERRA>
}
void SIMB ():{}
{
<SUM>|<RES>|<MUL>|<DIV>
}
void CVALOR ():{}
{
<ID>|<NUM_REAL>
}
void CFOR():{}
{<
<FOR><CORABRE>CRECORRE ()<PNTYCOMA>DATO ()<PNTYCOMA>DATO ()<PNTYCOMA>CTIPO
()<ID>SIMB()|<IG><ID><PNTYCOMA><CORCIERRA>
}
void CWILL ():{}
{
<WHILE><CORABRE>DATO ()<CORCIERRA><CORABRE>CTIPO ()<ID>SIMB ()?|<IG>DATO
()<PNTYCOMA><CORCIERRA>
}
void CDO() : {}
{
<DO><CORABRE><ID>
}