Você está na página 1de 8

/*

* Ejercicio Vehiculos

* Creado por: Orlando Arboleda Molina

* Fecha: 16-Septiembre-2017

* Descripción:

* Archivo javaCC para el análisis sintáctico y recuperacion de error del ejercicio

* de Formula 1 para el curso de Teoría de la Computación en la

* Universidad Autónoma de Occidente

* Nota: Es necesario que la codificación usada sea ISO-8859-1.

*/

PARSER_BEGIN(ProcesaVehiculos)

import Util.*;

public class ProcesaVehiculos{

// Zona para creación de variables u objetos

static TablaSimbolos tabla = new TablaSimbolos();

public static void main(String args[]) {

try {

ProcesaVehiculos parser = new ProcesaVehiculos(System.in);

parser.procesaVehiculos();

} catch (ParseException e) {

System.out.println(e.getMessage());

}
// Metodo para personalizar el mensaje error sintactico

public static String mensajeError(String donde, ParseException e)

String res="Error en " + donde +

" Linea:" + e.currentToken.next.beginLine +

" Columna:" + e.currentToken.next.beginColumn +

" Encontrado:" + e.currentToken.next.toString() +

" Se esperaba:";

for (int i=0; i<e.expectedTokenSequences[0].length; i++)

if (i!=0)

res+=" , ";

res+=e.tokenImage[e.expectedTokenSequences[0][i]];

return res;

PARSER_END(ProcesaVehiculos)

SKIP : {

""

| "\t"

| "\n"

| "\r"

TOKEN :
{

<TERMINAR: "FIN">

| <REFERENCIA:
<LETRA_MAY>(<LETRA_MIN>)+"_"(<DIGITO>|<LETRA_MAY>((<DIGITO>)+|(<LETRA_MIN>)+))>

| <VEL_PROMEDIO: (<DIGITO>)+>

| <PLACA: <LETRA_MAY><LETRA_MAY><LETRA_MAY>"-"<DIGITO><DIGITO><DIGITO>>

| <PROPIETARIO: <LETRA_MAY>(<LETRA_MIN>)+" "<LETRA_MAY>(<LETRA_MIN>)+>

| <DISTANCIA: (<DIGITO>)+"."(<DIGITO>)+>

| <FIN_LINEA: "*">

| <#DIGITO: ["0"-"9"]>

| <#LETRA_MAY: ["A"-"Z"]>

| <#LETRA_MIN: ["a"-"z"]>

| <RESTO: (~["*","_","-","."," ","\t","\n","\r"])+>

System.out.println("Resto "+ image +

" Linea:" + matchedToken.beginLine +

" Columna:" + matchedToken.beginColumn);

/*

gramatica ::= ( exprFinalizada )+

*/

void procesaVehiculos():{

( datosBasicos() )+ ( usoVehiculos() )+ <TERMINAR>

}
void datosBasicos(): {

String referencia;

int velocidad;

}{

try{

<REFERENCIA> {

referencia = token.image;

<VEL_PROMEDIO> {

velocidad = Integer.parseInt(token.image);

<FIN_LINEA>{

tabla.insertar(referencia, velocidad);

}catch(ParseException e){

System.out.println(mensajeError("Datos Basicos",e));

// Para hacer recuperacion de error, en modo panico.

// se debe detener el ciclo con el(los) punto(s) de control

Token t;

do {

t = getNextToken();

} while (t.kind != FIN_LINEA);

//System.out.println("Archivo procesado NO satisfactoriamente");

void usoVehiculos(): {

String referencia, placa;

double totalDistancia = 0.0;


Simbolo simbolo;

}{

try{

<PLACA> {

placa = token.image;

<REFERENCIA> {

referencia = token.image;

<PROPIETARIO>

(<DISTANCIA> {

totalDistancia += Double.parseDouble(token.image);

)+

<FIN_LINEA> {

System.out.println("Placa:"+placa+" Referencia:"+referencia+"
TotalDistancia:"+totalDistancia);

simbolo = tabla.buscar(referencia);

if (simbolo !=null)

System.out.println("SI existe");

else

System.out.println("NO existe");

}
}

}catch(ParseException e){

System.out.println(mensajeError("Uso Vehiculos",e));

// Para hacer recuperacion de error, en modo panico.

// se debe detener el ciclo con el(los) punto(s) de control

Token t;

do {

t = getNextToken();

} while (t.kind != FIN_LINEA);

//System.out.println("Archivo procesado NO satisfactoriamente");

/*

void procesaVehiculos():{

try {

<REFERENCIA>

tabla.insertar(token.image,50);

| <VEL_PROMEDIO>

| <PLACA>

| <PROPIETARIO>

| <DISTANCIA>

| <FIN_LINEA>
| <RESTO>

)*

(<TERMINAR>|<EOF>)

Simbolo objS = tabla.buscar("Chevrolet_Aveo");

if (objS != null)

System.out.println("El valor de "+objS.getNombre()+" es "+objS.getValor());

else

System.out.println("Dato no almacenado");

System.out.println("Archivo procesado satisfactoriamente");

} catch(TokenMgrError e){

System.out.println("Error léxico - NO SE RECONOCE "+e.getMessage());

catch(ParseException e){

System.out.println(mensajeError("procesaVehiculos",e));

// Para hacer recuperacion de error, en modo panico.

// se debe detener el ciclo con el(los) punto(s) de control

Token t;

do {

t = getNextToken();

} while (t.kind != TERMINAR);

System.out.println("Archivo procesado NO satisfactoriamente");

}
}*/

Você também pode gostar