Sie sind auf Seite 1von 7

PARSER_BEGIN (analizador)

import java.io.*;

public class analizador


{
public static void main(String args[]) throws ParseException
{
BufferedReader Nuevo= new BufferedReader(new InputStreamReader(System.in));

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;
}

int error = 0, crash=0;


String opc="";
Token t;

try
{
parser = new analizador(new FileInputStream(nombre));
}
catch(FileNotFoundException e)
{
return;
}

t = parser.getNextToken();

System.out.println("\nEXPRESION\t\tCOMPONENTE LEXICO\n");

while(t.kind != 0 && crash==0)

if (t.kind > 0 && t.kind <= 11)


{ opc = "\t\tPLBS_RES";}

else if (t.kind > 11 && t.kind <= 12)


{opc = "\t\tCOMN";}

else if (t.kind > 12 && t.kind <= 13)


{opc = "\t\tID";}

else if (t.kind > 13 && t.kind <= 14)


{opc = "\t\tNUM_REAL";}

else if (t.kind > 14 && t.kind <= 15)


{opc = "\t\tNUM_DEC";}

else if (t.kind > 15 && t.kind <= 21)


{opc = "\t\tSIGN_AGRU";}

else if (t.kind > 21 && t.kind <= 26)


{opc = "\t\tOPE_REL";}

else if (t.kind > 27 && t.kind <= 29)


{opc = "\t\tOPE_LOG";}

else if (t.kind > 29 && t.kind <= 30)


{opc = "\t\tSIMB_ASIG";}

else if (t.kind > 31 && t.kind <= 34)


{opc = "\t\tOPE_ARI";}

else if (t.kind > 34 && t.kind <= 40)


{opc = "\t\tOPE_COND";}

else if (t.kind > 40 && t.kind <= 43)


{opc = "\t\tCICLOS";}

else if (t.kind > 43 && t.kind <= 47)


{opc = "\t\tTIP_DD";}

else if (t.kind > 47 && t.kind <= 48)


{opc = "\t\tFIN_STN";}

else if (t.kind > 48 && t.kind <= 50)


{opc = "\t\tMTDO_ACCS";}

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;
}

else {opc ="\tcomponente desconocido\n";}

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;
}

System.out.println("El analisis ha terminado.\n");

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>
}

Das könnte Ihnen auch gefallen