Ayuda Creación de Ventana con Analisis Lexico y Sintactico

Buenas tardes, espero me puedan ayudar en un problema que llevo dias tratando de resolver pero simplemente no he podido, espero y ustedes me puedan ayudar. de antemano decir que ya he revisado en los temas de compiladores pero ninguno se asemeja a mi problema, espero puedan responderme. muchas gracias

Veran llego Lenguajes y Automatas 2, tenemos que crear nuestro propio lenguaje de programacion(basado en uno existente) y su compilador. En nuestro caso nos toco Python, el cual hemos tomado como tal y modificado solo unas cosas para hacerlo "nuestro" por asi decirlo, decidimos llamarlo Boa2014...Para ello usaremos la herramienta Javacc

El punto es que tenemos que construir las primeras fases es decir el Analisis Lexico y el Sintactico, lo hemos hecho y hacerlo funcionar por consola haciendo todo el proceso, lo cual nos muestra los tokens y en caso de errores sintacticos tambien estos,

----El problema---

Nos pidieron que creemos una Ventana para simular el compilador. en esta existiran los menus archivo: nuevo,abrir archivo, cerrar. y menu compilar: compilar. Dentro de la ventana tendremos 3 espacios de trabajo, 1.-El codigo que abriremos, 2.- Al dar clic en ejecutar, correra el analisis lexico y nos mostrar los tokens, 3.-aqui mostrar los errores sintacticos en caso de existirlos despues de analisis lexico, pero al correrlo ya no, se nos genera el archivo sintactico.txt como antes, en caso contrario si se genera el lexico.txt y la ventana se congela como esperando algo

Asi quedaria nuestro compilador
_______________
|///////////|/////////////|
|///////////|/////////////|
|///////////|/////2//////|
|/////1////|/////////////|
|///////////|/////////////|
|///////////|/////////////|
|///////////|//////3/////|
|_______|_______|

Si no me equivoco lo que hay que hacer es una vez que obtengamos los archivos lexico.txt y sintactico.txt es abrirlos en sus respectivos lugares. pero he ally el problema ya que al darle compilar solo carga los tokens, pero se queda ciclado por alguna razon que desconosco como menciono en el punto 3 de arriba

Espero me puedan ayudar y dejo los archivos que son el Boa2014.jj y Ventana.java el primero contiene la parte lexico y sintactico y el segundo mi IDE por asi decirlo

Codigo de Boa2014.jj

 options
{
   STATIC = false;
   KEEP_LINE_COLUMN= true;
   IGNORE_CASE = true;
}

PARSER_BEGIN(Boa2014)
  import java.io.*;
  import java.lang.*;
  import java.util.*;
  import javax.swing.*;
 
 
public class Boa2014{
  public static FileOutputStream Sint1;
  public static DataOutputStream Sint2;
  public static  FileOutputStream Token1;
  public static  DataOutputStream Token2;
  static int linea;
 
    Ventana   v;
     
        public String ar[]=new String[1024];

   public static void archSint_crear(String nombre_arch)
    {
      try {
           Sint1 = new FileOutputStream(nombre_arch);
           Sint2 = new DataOutputStream(Sint1);
          }
      catch (IOException Ex)
          {
           System.err.println("No se creo el archivo correctamente");
          }
     }
  public static void archSint_cerrar()
     {
      try {
           Sint1.close();
          }
      catch (IOException Ex)
          {
           System.err.println("No se cerro corectamente");
          }
     }
  public static void archSint_escribe(String Mensaje)
     {
      try {
           Sint2.writeBytes(Mensaje+"\r");
           Sint1.write('\n');
          }
      catch(IOException Ex)
          {
           System.err.println("No se escribio correctamente");
          }
     }
 public static void archtoken_crear(String nombre_arch)
  {
    try
    {
      Token1 = new FileOutputStream(nombre_arch);
      Token2 = new DataOutputStream(Token1);
    }
    catch (IOException Ex)
    {
      System.err.println("No se creo el archivo correctamente");
    }
  }
  public static void archtoken_cerrar()
  {
    try
    {
      Token1.close();
    }
    catch (IOException Ex)
    {
      System.err.println("No se cerro el archivo corectamente");
    }
   }
  public static void archtoken_escribe(String Mensaje)
  {
    try
    {
      Token2.writeBytes(Mensaje+"\r");
      Token1.write('\n');
    }
    catch(IOException Ex)
    {
      System.err.println("No se escribio en el archivo correctamente");
    }
   }
  public static boolean analiza(String nombre, Ventana v)  throws ParseException
  {
    Boa2014 analiza;

     try
        {
                    analiza = new Boa2014(new java.io.FileInputStream(nombre));
                    analiza.archtoken_crear("Lexico.txt");
                                        analiza.input(analiza, v);
                                        analiza.archtoken_escribe("Analisi Lexico Terminado");
                    analiza.archtoken_cerrar();

                                        Boa2014 sintactico = new Boa2014 (new java.io.FileInputStream(nombre));
                                        sintactico.archSint_crear("Sintactico.txt");
                    sintactico.Boa2014();
                                        analiza.archtoken_escribe("Analisi Sintactico Terminado");
                    sintactico.archSint_cerrar();
        }
        catch (java.io.FileNotFoundException e)
        {
           return false;
        }
        return true;
      }

     public static void main(String args[]) throws ParseException
        {
                Ventana v= new Ventana();
        }
}
 

PARSER_END(Boa2014)

SKIP:
{
 "\t"
|"\r"
|" "
|"\n"
}

TOKEN:
{
<pand: ("a")("n")("d")>                                        
|<pas: ("a")("s")>                                                                             
|<passert:("a")("s")("s")("e")("r")("t")>                  
|<pbreak:("b")("r")("e")("a")("k")>                                    
|<pclass:("c")("l")("a")("s")("s")>                                            
|<pcontinue:("c")("o")("n")("t")("i")("n")("u")("e")>    
|<pdef:("d")("e")("f")>                                                                                        
|<pdel:("d")("e")("l")>                                                                                
|<pelif:("e")("l")("i")("f")>                                                                          
|<pelse:("e")("l")("s")("e")>                                                                  
|<pexcept:("e")("x")("c")("e")("p")("t")>                              
|<pexec:("e")("x")("e")("c")>                                          
|<pFalse:("F")("a")("l")("s")("e")>                                                    
|<pfinally:("f")("i")("n")("a")("l")("l")("y")>                        
|<pfor:("f")("o")("r")>                                                                        
|<pfrom:("f")("r")("o")("m")>                                                          
|<pglobal:("g")("l")("o")("b")("a")("l")>                              
|<pif:("i")("f")>                                                                                                      
|<pimport:("i")("m")("p")("o")("r")("t")>                              
|<pin:("i")("n")>                                                                                                      
|<pis:("i")("s")>                                                                                              
|<plambda:("l")("a")("m")("b")("d")("a")>                              
|<pnot:("n")("o")("t")>                                                                        
|<por:("o")("r")>                                                                                              
|<ppass:("p")("a")("s")("s")>                                                          
|<pprint:("p")("r")("i")("n")("t")>                                                    
|<praise:("r")("a")("i")("s")("e")>                                                    
|<preturn:("r")("e")("t")("u")("r")("n")>                                              
|<ptry:("t")("r")("y")>                                                                                
|<pTrue:("T")("r")("u")("e")>                                                          
|<pwhile:("w")("h")("i")("l")("e")>                                    
|<pwith:("w")("i")("t")("h")>                                                          
|<pyield:("y")("i")("e")("l")("d")>
|<pseno:("s")("e")("n")("o")>  
|<pcoseno:("c")("o")("s")("e")("n")("o")>      
|<ptangente:("t")("a")("n")("g")("e")("n")("t")("e")>  
|<pln:("l")("n")>      
|<plog:("l")("o")("g")>                                                
}

TOKEN:
{
<parenabre:"(">                                                                                                
|<parencierra:")">                                                                                             
|<llaveabre:"{">                                                                                                 
|<llavecierra:"}">                                                                                               
|<corabre:"[">                                                                                                   
|<corcierra:"]">                                                                                                       
|<arroba:"@">                                                                                                  
|<coma:",">                                                                                                      
|<dospuntos:":">                                                                                                 
|<punto:".">                                                                                           
|<comillainv:"`">                                                                                              
|<asignacion:"=">                                                                                              
|<puncoma:";">                                                                                         
|<sumaasig:"+=">                                                                                       
|<menosasig:"-=">                                                                                      
|<multiasig:"*=">                                                                                      
|<divideasig:"/=">                                                                                     
|<residuoasig:"%=">                                                                                    
|<yasig:"&=">                                                                                          
|<oasig:"|=">                                                                                          
|<cambioderasig:">>=">                                                                   
|<cambioizqasig:"<<=">                                                         
                                                                                               
|<comillas:"\'">                                                               
|<sharp:"#">                                                                                               
}

TOKEN:
{
<suma:"+">                                                                                                       
|<resta:"-">                                                                                                   
|<multi:"*">                                                                                                     
|<potencia:"**">                                                                                               
|<div:"/">                                                                                                     
|<divdoble:"//">                                                                                                 
|<residuo:"%">                                                                                                 
|<cambioizq:"<<">                                                                                      
|<cambioder:">>">                                                                                      
|<ybin:"&">                                                                                                    
|<obin:"|">                                                                                                      
|<nobin:"~">                                                                                                     
|<menor:"<">                                                                                           
|<mayor:">">                                                                                                     
|<menigual:"<=">                                                                                               
|<mayigual:">=">                                                                               
|<igual:"==">                                                                                          
|<negacion:"!=">                                                                                               
}

TOKEN:{
 <caracter:<comillas>["A"-"Z","a"-"z"]<comillas>>
| <cad:<comillas>( (["A"-"Z","a"-"z"])|("?")|(" ")|<coma>|<puncoma>|<punto>
                               |("¿")|("#")|("+")|("*")|("~")|("%")|("=")|<llaveabre>|("{")|("}")
                               |("!")|("¡")|<corabre>|<corcierra>|<dospuntos>|<dig>)*<comillas>>
| <dig:(["0"-"9"])+>
| <real:("-")?<dig>(".")<dig>>
| <ident: (["A"-"Z","a"-"z"]|"_")(["A"-"Z","a"-"z"]|(["0"-"9"])|"_")*>
| <cad_noval:((["A"-"Z","a"-"z"])|(["0"-"9"])|"_")*("&"|"ñ"|"º"|"$"|"^")+ ((["A"-"Z","a"-"z"])|(["0"-"9"])|"_"|("&"|"ñ"|"º"|"$"|"^"))*>
}

void input(Boa2014 analiza, Ventana v):{String mensaje;}
{
   (mensaje=Checa()
    {
       analiza.archtoken_escribe(mensaje);
       v.t.append(mensaje+"\n");
    })+<EOF>
}

String Checa():{Token t;  }
 {

  t=<pand>
        { return ( t.image +"\t\t Palabra reservada and"); }

| t=<pas>
        { return ( t.image +"\t\t Palabra reservada as");}
       
| t=<passert>
        { return ( t.image +"\t\t Palabra reservada assert");} 

| t=<pbreak>
        { return ( t.image +"\t\t Palabra reservada break");}

| t=<pclass>
        { return ( t.image +"\t\t Palabra reservada class");}

| t=<pcontinue>
        { return ( t.image +"\t\t Palabra reservada continue");}

| t=<pdef>
        { return ( t.image +"\t\t Palabra reservada def");}

| t=<pdel>
        { return ( t.image +"\t\t Palabra reservada del");}
       
| t=<pelif>
        { return ( t.image +"\t\t Palabra reservada elif");}   

| t=<pelse>
        { return ( t.image +"\t\t Palabra reservada else");}

| t=<pexcept>
        { return ( t.image +"\t\t Palabra reservada expect");}
       
| t=<pexec>
        { return ( t.image +"\t\t Palabra reservada exec");}   

| t=<pFalse>
        { return ( t.image +"\t\t Palabra reservada False");}
       
| t=<pfinally>
        { return ( t.image +"\t\t Palabra reservada finally");}

| t=<pfor>
        { return ( t.image +"\t\t Palabra reservada for");}

| t=<pfrom>
        { return ( t.image +"\t\t Palabra reservada from");}
       
| t=<pglobal>
        { return ( t.image +"\t\t Palabra reservada global");}         

| t=<pif>
        { return ( t.image +"\t\t Palabra reservada if");}
       
| t=<pimport>
        { return ( t.image +"\t\t Palabra reservada import");}
       
| t=<pin>
        { return ( t.image +"\t\t Palabra reservada in");}
               
| t=<pis>
        { return ( t.image +"\t\t Palabra reservada is");}
       
| t=<plambda>
        { return ( t.image +"\t\t Palabra reservada lambda");}

| t=<pnot>
        { return ( t.image +"\t\t Palabra reservada not");}    
       
| t=<por>
        { return ( t.image +"\t\t Palabra reservada or");}
       
| t=<ppass>
        { return ( t.image +"\t\t Palabra reservada pass");}
       
| t=<pprint>
        { return ( t.image +"\t\t Palabra reservada print");}
       
| t=<praise>
        { return ( t.image +"\t\t Palabra reservada raise");}                                          
               
| t=<preturn>
        { return ( t.image +"\t\t Palabra reservada return");}

| t=<pTrue>
        { return ( t.image +"\t\t Palabra reservada True");}

| t=<ptry>
        { return ( t.image +"\t\t Palabra reservada try");}

| t=<pwhile>
        { return ( t.image +"\t\t Palabra reservada while");}
       
| t=<pwith>
        { return ( t.image +"\t\t Palabra reservada with");}
       
| t=<pyield>
        { return ( t.image +"\t\t Palabra reservada yield");}
       
| t=<pseno>
        { return ( t.image +"\t\t Palabra reservada seno");}   

| t=<pcoseno>
        { return ( t.image +"\t\t Palabra reservada coseno");}         
       
| t=<ptangente>
        { return ( t.image +"\t\t Palabra reservada tangente");}               
       
| t=<pln>
        { return ( t.image +"\t\t Palabra reservada ln");}
       
| t=<plog>
        { return ( t.image +"\t\t Palabra reservada log");}                                                                                            

| t=<puncoma>
        { return ( t.image +"\t\t Simbolo ;");}

| t=<dospuntos>
        { return ( t.image +"\t\t Simbolo :");}

| t=<coma>
        { return ( t.image +"\t\t Simbolo ,");}

| t=<punto>
        { return ( t.image +"\t\t Simbolo .");}

| t=<parenabre>
        { return ( t.image +"\t\t Operador (");}

| t=<parencierra>
        { return ( t.image +"\t\t Operador )");}
       
| t=<arroba>
        { return ( t.image +"\t\t Operador @");}
       
| t=<comillainv>
        { return ( t.image +"\t\t Operador `");}               

| t=<corabre>
        { return ( t.image +"\t\t Operador [");}

| t=<corcierra>
        { return ( t.image +"\t\t Operador ]");}

| t=<llaveabre>
        { return ( t.image +"\t\t Operador {");}

| t=<llavecierra>
        { return ( t.image +"\t\t Operador }");}

| t=<asignacion>
        { return ( t.image +"\t\t Operador = ");}

| t=<mayor>
        { return ( t.image +"\t\t Operador > ");}

| t=<menor>
        { return ( t.image +"\t\t Operador < ");}

| t=<menigual>
        { return ( t.image +"\t\t Operador <= ");}

| t=<mayigual>
        { return ( t.image +"\t\t Operador >= ");}

| t=<suma>
        { return ( t.image +"\t\t Operador + ");}

| t=<resta>
        { return ( t.image +"\t\t Operador - ");}

| t=<div>
        { return ( t.image +"\t\t Operador / ");}
       
| t=<divdoble>
        { return ( t.image +"\t\t Operador // ");}     

| t=<multi>
        { return ( t.image +"\t\t Operador * ");}
       
| t=<potencia>
        { return ( t.image +"\t\t Operador ** ");}     

| t=<residuo>
        { return ( t.image +"\t\t Operador % ");}

| t=<cambioizq>
        { return ( t.image +"\t\t Operador << ");}

| t=<cambioder>
        { return ( t.image +"\t\t Operador >> ");}

| t=<nobin>
        { return ( t.image +"\t\t Operador ~ ");}

| t=<igual>
        { return ( t.image +"\t\t Operador == ");}

| t=<negacion>
        { return ( t.image +"\t\t Operador != ");}

| t=<ybin>
        { return ( t.image +"\t\t Operador binario & ");}

| t=<obin>
        { return ( t.image +"\t\t Operador binario | ");}

| t=<sumaasig>
        { return ( t.image +"\t\t Operador asignacion += ");}

| t=<menosasig>
        { return ( t.image +"\t\t Operador asignacion -= ");}

| t=<multiasig>
        { return ( t.image +"\t\t Operador asignacion *= ");}

| t=<divideasig>
        { return ( t.image +"\t\t Operador asignacion /= ");}

| t=<residuoasig>
        { return ( t.image +"\t\t Operador asignacion %= ");}

| t=<yasig>
        { return ( t.image +"\t\t Operador asignacion &= ");}

| t=<oasig>
        { return ( t.image +"\t\t Operador asignacion |= ");}

| t=<cambioizqasig>
        { return ( t.image +"\t\t Operador asignacion <<= ");}

| t=<cambioderasig>
        { return ( t.image +"\t\t Operador asignacion >>= ");}
       
| t=<comillas>
        { return ( t.image +"\t\t Operador asignacion \" ");}
       
| t=<sharp>
        { return ( t.image +"\t\t Operador asignacion # ");}                   

| t=<ident>
        { return ( t.image +"\t\t Identificador ");}

| t=<caracter>
        { return ( t.image +"\t\t Caracter ");}

| t=<dig>
        { return ( t.image +"\t\t Numero Entero ");}

| t=<real>
        { return ( t.image +"\t\t Numero real ");}
       
| t=<cad>
        { return ( t.image +"\t\t Cadena de caracteres ");}    

| t=<cad_noval>
        { return ( t.image +"\t\t Cadena no valida ");}

}

String Boa2014(): {}
{
try{
           CABECERA(v)DECLARACIONES(v)CUERPO(v)
   }
catch(ParseException e)
{
   String msg = e.getMessage();
        return ("Error en el programa: "+msg);
   Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
   }
}
}

void CABECERA(Ventana v):{}
{  try
    { <pimport><ident>  }
    catch(ParseException e)
   {System.out.println("Error en la cabecera: "+linea);
   
     Token t=getToken(0);
      if (t.image=="\n")
     {
      linea = linea + 1;
      }
     if (t.image != ";" & t.image != "pend;" & t.image != "\n")
     {
      do{
           t=getNextToken();
          }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
      archSint_escribe("Error en la cabecera: " +t.beginLine + "\n");
          v.errores.append("Error en la cabecera en la linea: " +t.beginLine + "\n");
     }
    Boa2014();
 }
}

void DECLARACIONES(Ventana v): {}
{
 try {
          <llaveabre>(D_VAR(v) |D_FUNC(v))*<llavecierra>
        }
  catch(ParseException e)
         {  System.out.println("Error en las declaraciones ");
          Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en las declaraciones " +t.beginLine + "\n");
     v.errores.append("Error en las declaraciones ");
   }
  Boa2014();
        }
}

void D_VAR(Ventana v): {}
{
try {
              (<ident><asignacion>((VALOR(v) (OPARI(v)VALOR(v))*)
                                          |(<parenabre>VALOR(v) (OPARI(v)VALOR(v))* <parencierra>)
                                               )  )
           
      }
          catch(ParseException e)
          {
           System.out.println("Error en definicion de variables: "+linea);
         
           Token t=getToken(0);
   if (t.image=="\n")                              
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
      archSint_escribe("Error en la DECLARACION DE VARIABLES " +t.beginLine + "\n");
          v.errores.append("Error en la DECLARACION DE VARIABLES " +t.beginLine + "\n");
   }
DECLARACIONES(v);
 }
}

void DLISTA(Ventana v):{}
{
try {  <corabre>
         (   <dig>|<caracter>|<cad>|<real>      
         )  <corcierra>
      }
          catch(ParseException e)
          {
           System.out.println("Error en definion de la lista: "+linea);
         
           Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "end;" & t.image != "\n");
     archSint_escribe("Error en la declaracion de la lista " +t.beginLine + "\n");
     v.errores.append("Error en la declaracion de la lista " +t.beginLine + "\n");
   }
D_VAR(v);
  }
}

void DICCIONARIO(Ventana v):{}
{
try {  <llaveabre>
         (   (((<dig>|<caracter>|<cad>|<real>)+<dospuntos>(<dig>|<caracter>|<cad>|<real>))?<coma>((<dig>|<caracter>|<cad>|<real>)+<dospuntos>(<dig>|<caracter>|<cad>|<real>))*)      
         )  <llavecierra>
      }
          catch(ParseException e)
          {
           System.out.println("Error en definion en el diccionario: "+linea);
         
           Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "end;" & t.image != "\n");
      archSint_escribe("Error en la declaracion del diccionario " +t.beginLine + "\n");
          v.errores.append("Error en la declaracion del diccionario" +t.beginLine + "\n");
   }
D_VAR(v);
  }
}

void ASIGNA(Ventana v): {}
{
  try {
          <ident><asignacion>( (VALOR(v) (OPARI(v)VALOR(v))*)
                                                  |(<parenabre>VALOR(v) (OPARI(v)VALOR(v))* <parencierra>)
                                               )  
        }
  catch(ParseException e)
    {     System.out.println("Error en la asignacion: "+linea);
         
           Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en las asignaciones " +t.beginLine + "\n");
         v.errores.append("Error en las asignaciones " +t.beginLine + "\n");
   }
INSTRUCCIONES(v);
 }
}

void VALOR(Ventana v):{}
{
    <real>|<dig>|<pTrue>|<pFalse>|(<ident>(DLISTA(v)|DICCIONARIO(v)))|<cad>
}

void OPARI(Ventana v):{}
{
 <suma>|<resta>|<multi>|<div>|<potencia>|<residuo>
}

void D_FUNC(Ventana v):{}
{
try {
         <pdef><ident>(PARAMET(v))?
                                           (D_VAR(v)|D_FUNC(v))?
                                           <llaveabre> (INSTRUCCIONES(v))+<llavecierra>
      }
          catch(ParseException e)
          {
           System.out.println("Error en declaracion de funcion: "+linea);
         
           Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en la declaracion de funciones " +t.beginLine + "\n");
         v.errores.append("Error en la declaracion de funciones " +t.beginLine + "\n");
   }
DECLARACIONES(v);
 }
}

void PARAMET(Ventana v):{}
{
try
    {  <parenabre><ident>
                        (<puncoma><ident>)*
        <parencierra>
   }
  catch(ParseException e)
   {
    System.out.println("Error en los parametros: "+linea);
   
   Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en los parametros " +t.beginLine + "\n");
         v.errores.append("Error en los perametros " +t.beginLine + "\n");
   }
DECLARACIONES(v);
 }
}

void CUERPO(Ventana v): {}
{try
    {<llaveabre>(INSTRUCCIONES(v))+<llavecierra>}
  catch(ParseException e)
   {Token t=getToken(0);
     if (t.image=="\n")
     {
       linea = linea + 1;
     }
     if (t.image != ";" & t.image != "pend;" & t.image != "\n")
     {
      do{
         t=getNextToken();
      }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     }
  }
}

void INSTRUCCIONES(Ventana v):{}
 {
    FUNCIONES(v)
   |ASIGNA(v)
   |CICLOS(v)
}

void FUNCIONES(Ventana v):{}
{
    try
    {
     ((<pseno>|<pcoseno>|<ptangente>|<pln>|<plog>)<parenabre>(<dig>|<real>)<parencierra><puncoma>)

         |((<pprint>)<parenabre>(COMENTARIO(v))?(<coma><ident>))<parencierra><puncoma>
 }
 catch(ParseException e) {
 System.out.println("\r"+"\n"+"Error en la funcion: " +linea);

  Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en la funcion " +t.beginLine + "\n");
         v.errores.append("Error en la funcion " +t.beginLine + "\n");
   }
INSTRUCCIONES(v);
 }
}

void COMENTARIO(Ventana v):{}
{
   <divdoble>((<ident>(<dig>|<cad>|<real>|<cad_noval>)?)|COMENTARIO(v))?
}

void CICLOS(Ventana v):{}
 {
   GWHILE(v)
   |GIF(v)
   |GFOR(v)
   
 }

void   GWHILE(Ventana v) : {}
{
 try{
   <pwhile> CONDICION(v)
  ( (<parenabre>(INSTRUCCIONES(v))+ <parencierra>) | (INSTRUCCIONES(v))  )
   }
 catch(ParseException e) {
 System.out.println("\r"+"\n"+"Error en while linea:" +linea);
 
            Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en while " +t.beginLine + "\n");
         v.errores.append("Error en while " +t.beginLine + "\n");
   }
CICLOS(v);
 }
}

void CONDICION(Ventana v):{}
{
try
  {
      (<pnot>)? (                   (VALOR(v)(OPREL(v)VALOR(v))?)
                                      | (<parenabre>VALOR(v)(OPREL(v)VALOR(v))?<parencierra>
                                         (OPELOG(v)<parenabre>VALOR(v)(OPREL(v)VALOR(v))?<parencierra>)*)
                        )
  }
 catch(ParseException e) {
 System.out.println("\r"+"\n"+"Error en la condicion" +linea);
 
 Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
      archSint_escribe("Error en la condicion " +t.beginLine + "\n");
          v.errores.append("Error en la condicion " +t.beginLine + "\n");
   }
}
}

void OPREL(Ventana v):{}
{
  <igual>|<negacion>|<mayor>|<menor>|<mayigual>|<menigual>
}

void OPELOG(Ventana v):{}
{
    <pand>|<por>
}

void GIF(Ventana v):{}
{
 try{
    <pif>CONDICION(v)<dospuntos>
           (                     ( <llaveabre>(INSTRUCCIONES(v))+<llavecierra>( GELIF(v) | GELSE(v))   )
                             | INSTRUCCIONES(v)
          )  
 }
 catch(ParseException e)
{
 System.out.println("\r"+"\n"+"Error en IF linea:" +linea);

           Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en el if " +t.beginLine + "\n");
         v.errores.append("Error en el if " +t.beginLine + "\n");
   }
CICLOS(v);
}
}

void GELIF(Ventana v):{}
{
try
 {
  <pelif>(  (<llaveabre>(INSTRUCCIONES(v))+<llavecierra>)
                     | INSTRUCCIONES(v)
                )

}
 catch(ParseException e) {
 System.out.println("\r"+"\n"+"Error en elif de la  linea:" +linea);

Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en el elif " +t.beginLine + "\n");
         v.errores.append("Error en el elif " +t.beginLine + "\n");
   }
GIF(v);
}
}

void GELSE(Ventana v):{}
{
try
 {
  <pelse>(  (<llaveabre>(INSTRUCCIONES(v))+<llavecierra>)
                     | INSTRUCCIONES(v)
                )

}
 catch(ParseException e) {
 System.out.println("\r"+"\n"+"Error en else de la  linea:" +linea);
 
Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en el else " +t.beginLine + "\n");
         v.errores.append("Error en el else " +t.beginLine + "\n");
   }
GIF(v);
}
}

void GFOR(Ventana v):{}
{
try
 {
   <pfor><parenabre><ident><asignacion><dig>(OPARI(v)<dig>)
           <puncoma>(<ident>|<dig>)(OPARI(v)<dig>)<parencierra>
   (   (<llaveabre>(INSTRUCCIONES(v))+<llavecierra>)
   | (INSTRUCCIONES(v))
   )

}
 catch(ParseException e) {
 System.out.println("\r"+"\n"+"Error en FOR linea:" +linea);

Token t=getToken(0);
   if (t.image=="\n")
   {
    linea = linea + 1;
   }
   if (t.image != ";" & t.image != "pend;" & t.image != "\n")
   {
    do{
     t=getNextToken();
    }while(t.image != ";" & t.image != "pend;" & t.image != "\n");
     archSint_escribe("Error en el for " +t.beginLine + "\n");
         v.errores.append("Error en el for " +t.beginLine + "\n");
   }
CICLOS(v);
}
}

Codigo Ventana.java

import java.awt.FileDialog;
import java.io.*;
import java.awt.*;
public class Ventana extends java.awt.Frame {

    public Ventana() {
        super("Compilador de Python");
        initComponents();
        nomArch= "";
        nombre= "";
        show();
    }

    private void initComponents() {
        String n= "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n51\n52\n53\n54\n55\n56\n57\n58\n59\n60\n61\n62\n63\n64\n65\n66\n67\n68\n69\n70\n71\n72\n73\n74\n75\n76\n77\n78\n79\n80\n81\n82\n83\n84\n85\n86\n87\n88\n89\n90\n91\n92\n93\n94\n95\n96\n97\n98\n99\n100\n101\n102\n103\n104\n105\n106\n107\n108\n109\n110\n111\n112\n113\n114\n115\n116\n117\n118\n119\n120\n121\n122\n123\n124\n125\n126\n127\n128\n129\n130\n131\n132\n133\n134\n135\n136\n137\n138\n139\n140\n141\n142\n143\n144\n145\n146\n147\n148\n149\n150";
        ScrollPane h= new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
        panel4 = new java.awt.Panel();
        Centro = new java.awt.Panel();
        AreaTexto = new TextArea("",500,100,TextArea.SCROLLBARS_NONE);
        NumLin= new TextArea(n,500,1,TextArea.SCROLLBARS_NONE);
        NumLin.setEditable(false);
        panel2 = new java.awt.Panel();
        t = new java.awt.TextArea();
        errores = new java.awt.TextArea();
        menuBar1 = new java.awt.MenuBar();
        menu1 = new java.awt.Menu();
        mNuevo = new java.awt.MenuItem();
        mAbrir = new java.awt.MenuItem();
        mGuardar = new java.awt.MenuItem();
        mSalir = new java.awt.MenuItem();
        menu2 = new java.awt.Menu();
        mCompilar = new java.awt.MenuItem();
        addWindowListener(new java.awt.event.WindowAdapter() {
            public void windowClosing(java.awt.event.WindowEvent evt) {
                exitForm(evt);
            }
        });

        Centro.setLayout(new java.awt.BorderLayout());
        h.add(Centro);
        Centro.add(AreaTexto, BorderLayout.CENTER);
        Centro.add(NumLin, BorderLayout.WEST);

        add(h, java.awt.BorderLayout.CENTER);

        panel2.setLayout(new java.awt.GridLayout(2, 1));

        t.setEditable(false);
        t.setBackground(Color.gray);
        t.setForeground(Color.white);

       panel2.add(t);

        errores.setEditable(false);
        panel2.add(errores);      

        add(panel2, java.awt.BorderLayout.EAST);

        menu1.setLabel("Archivo");
        menu1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menu1ActionPerformed(evt);
            }
        });

        mNuevo.setLabel("nuevo archivo");
        mNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mNuevoActionPerformed(evt);
            }
        });

        menu1.add(mNuevo);

        menu1.addSeparator();
        mAbrir.setLabel("Abrir");
        mAbrir.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mAbrirActionPerformed(evt);
            }
        });

        menu1.add(mAbrir);

        mGuardar.setLabel("Guardar");
        mGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mGuardarActionPerformed(evt);
            }
        });

        menu1.add(mGuardar);

        menu1.addSeparator();
        mSalir.setLabel("Salir");
        menu1.add(mSalir);

        menuBar1.add(menu1);

        menu2.setLabel("Menu");
        mCompilar.setLabel("Compilar");
        mCompilar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                mCompilarActionPerformed(evt);
            }
        });

        errores.setForeground(Color.black);
        menu2.add(mCompilar);

        menuBar1.add(menu2);

        setMenuBar(menuBar1);

        pack();
    }

    private void mCompilarActionPerformed(java.awt.event.ActionEvent evt) {
        Guardar();
        nombre= nomArch;
        errores.setText("");
        t.setText("");
        try{
             Boa2014.analiza(nombre,this);
                       
        }
        catch (ParseException e)
        {  System.out.println("ERROR");
                        }
               

    }

    private void mGuardarActionPerformed(java.awt.event.ActionEvent evt) {
      Guardar();
    }

    private void mAbrirActionPerformed(java.awt.event.ActionEvent evt) {
        FileDialog fileDialog = new FileDialog(this, "Abrir...", FileDialog.LOAD);
        fileDialog.show();
        if (fileDialog.getFile() == null)
            return;
        nomArch = fileDialog.getDirectory() + File.separator + fileDialog.getFile();

        FileInputStream fis = null;
        String str = null;
        try {
            fis = new FileInputStream(nomArch);
            int size = fis.available();
            byte[] bytes = new byte [size];
            fis.read(bytes);
            str = new String(bytes);
        } catch (IOException e) {
        } finally {
            try {
                fis.close();
            } catch (IOException e2) {
            }
        }

        if (str != null)
            AreaTexto.setText(str);
             
   
    }

    private void mNuevoActionPerformed(java.awt.event.ActionEvent evt) {
        nomArch = "";
        AreaTexto.setText("");
        errores.setText("");
        t.setText("");
    }

    private void menu1ActionPerformed(java.awt.event.ActionEvent evt) {
       System.exit(0);
    }

    private void exitForm(java.awt.event.WindowEvent evt) {
        System.exit(0);
    }
   
        public void Guardar(){
    if ("".equals(nomArch))
{
        FileDialog fileDialog = new FileDialog(this, "Guardar Como...", FileDialog.SAVE);
        fileDialog.show();
        if (fileDialog.getFile() == null)
            return;
        nomArch = fileDialog.getDirectory() + File.separator + fileDialog.getFile();
}
        FileOutputStream fos = null;
        String str = AreaTexto.getText();
        try {
            fos = new FileOutputStream(nomArch);
            fos.write(str.getBytes());
        } catch (IOException e) {
        } finally {
            try {
                fos.close();
            } catch (IOException e2) {
            }
        }}

     java.awt.TextArea AreaTexto;
     java.awt.Panel Centro;
     java.awt.TextArea errores;
     java.awt.MenuItem mAbrir;
     java.awt.MenuItem mCompilar;
     java.awt.MenuItem mGuardar;
     java.awt.MenuItem mNuevo;
     java.awt.MenuItem mSalir;
     java.awt.Menu menu1;
     java.awt.Menu menu2;
     java.awt.MenuBar menuBar1;
     java.awt.Panel panel2;
     java.awt.Panel panel4;
     java.awt.TextArea t, NumLin;
     Scrollbar sb;
     String nomArch, nombre;

    public static void main (String [] args)
    {
     Ventana v = new Ventana();
    }
}

Espero y me puedan ayudar, cualquier cosa que necesiten diganme

AdjuntoTamaño
Boa2014.txt24.98 KB
Ventana.txt7.12 KB
ejemplo.txt85 bytes