CÓDIGO LÉXICO DEL LENGUAJE C++


options { LOOKAHEAD = 3;
          FORCE_LA_CHECK= true;
          IGNORE_CASE = true;
          STATIC = false;
        }

PARSER_BEGIN(Comp)
import java.io.*;
import java.lang.*;
import java.util.*;
import javax.swing.*;

public class Comp{
        public FileOutputStream Sint1;
        public DataOutputStream Sint2;
public FileOutputStream Token1;
public DataOutputStream Token2;

public String ar[]=new String[1024];


     public 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 void archSint_cerrar()
                {
                  try {
                        Sint1.close();
                      }
                  catch (IOException Ex)
                        { System.err.println("No se cerro corectamente"); }
                }

     public void archSint_escribe(String Mensaje)
                {
                  try {
                        Sint2.writeBytes(Mensaje+"\r");
                        Sint1.write('\n');
                      }
                  catch(IOException Ex)
                      {
        System.err.println("No se escribio correctamente");
                      }
                }

     public 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 void archtoken_cerrar()
                {
                  try {
                        Token1.close();
                      }
                  catch (IOException Ex)
                        {
                          System.err.println("No se cerro corectamente");
                        }
                }

     public void archtoken_escribe(String Mensaje)
                {
                  try {
                        Token2.writeBytes(Mensaje+"\r");
                        Token1.write('\n');
                      }
                  catch(IOException Ex)
                      {
        System.err.println("No se escribio correctamente");
                      }
                }

 public static void main(String args[])   throws ParseException
{
                Comp analiza;
if(args.length == 0)
{
                        System.err.println("Uso del programa: \"java comp archivo.ejm\"");
}
                else
                {
if(args.length == 1)
                        {
try
                                {
                                        analiza = new Comp(new java.io.FileInputStream(args[0]));
                                        analiza.archSint_crear("Sint.txt");
                                        analiza.sintac();
                                        analiza.archSint_cerrar();
}
                                catch (java.io.FileNotFoundException e)
                                {
System.out.println("No se pudo leer el archivo :   " + args[0] + " ");
}
try
                                {
                                        analiza = new Comp(new java.io.FileInputStream(args[0]));
                                        analiza.archtoken_crear("Lex.txt");
analiza.input(analiza);
}
                                catch (java.io.FileNotFoundException e)
                                {
System.out.println("No se pudo leer el archivo :   " + args[0] + " ");
}

}
                        else
                        {
                                 System.out.println("Formato: java Comp nombrearchivo.ejm");
}
}
}

void EscribeSintactico(String mensaje)
{
    archSint_escribe(mensaje);
}

}
PARSER_END(Comp)

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

TOKEN : {
         | | | | >
|       <#pchar: ("c")("h")("a")("r")>
|       <#pint: ("i")("n")("t")>
|       <#pfloat: ("f")("l")("o")("a")("t")>
|       <#pdouble: ("d")("o")("u")("b")("l")("e")>
|       <#pbyte: ("b")("y")("t")("e")>

|       ||>
|       <#ppublic: ("p")("u")("b")("l")("i")("c")>
|       <#pprivate: ("p")("r")("i")("v")("a")("t")("e")>
|       <#pprotected: ("p")("r")("o")("t")("e")("c")("t")("e")("d")>

|      
|      
|      
|      
|      
|      
|      
|      
|      
|      
|      

}

TOKEN :
{
  
|
|
|
|
|
|
|
|
|
|
}

TOKEN :
{
  
| ">
| <">
| <=">
| =">
|
|
| | <<">
| >">
|
|
|
|
|
|
|
|
|
|
|
|
|
| <<=">
| >=">

}

TOKEN :
{
  
|
| )+ >
| (".") >
| ( | | "_")* >
| (~[ "'" ])* >
|
| | | "_")* ()+ ( | | "_" | )* >
}

void input(Comp analiza) :
{ String mensaje; }
{ ( mensaje=Checa() { System.out.println(mensaje); analiza.archtoken_escribe(mensaje);} )+ }

String Checa() :
{    Token t;   }
{
  t=
{ return ( t.image +"\t\t especificador de acceso");}
| t=
{ return ( t.image +"\t\t Palabra reservada class");}
| t=
{ return ( t.image +"\t\t Palabra reservada main");}
| t=
{ return ( t.image +"\t\t tipo dato");}
| t=
{ return ( t.image +"\t\t retorno de dato vacio ");}
| t=
{ return ( t.image +"\t\t Palabra reservada do");}
| t=
{ return ( t.image +"\t\t Palabra reservada else");}
| t=
{ return ( t.image +"\t\t Palabra reservada for");}
| t=
{ return ( t.image +"\t\t Palabra reservada if");}
| t=
{ return ( t.image +"\t\t Palabra reservada new");}
| t=
{ return ( t.image +"\t\t Palabra reservada return");}
| t=
{ return ( t.image +"\t\t Palabra reservada switch");}
| t=
{ return ( t.image +"\t\t Palabra reservada while");}
| t=
{ return ( t.image +"\t\t Simbolo :");}
| t=
{ return ( t.image +"\t\t Simbolo ;");}
| t=
{ return ( t.image +"\t\t Simbolo ,");}
| t=
{ return ( t.image +"\t\t Simbolo .");}
| t=
{ return ( t.image +"\t\t Operador (");}
| t=
{ return ( t.image +"\t\t Operador )");}
| t=
{ return ( t.image +"\t\t Operador [");}
| t=
{ return ( t.image +"\t\t Operador ]");}
| t=
{ return ( t.image +"\t\t Operador {");}
| t=
{ return ( t.image +"\t\t Operador }");}
| t=
{ return ( t.image +"\t\t Operador = ");}
| t=
{ return ( t.image +"\t\t Operador <= ");}
| t=
{ return ( t.image +"\t\t Operador >= ");}

| t=
{ return ( t.image +"\t\t Operador aritmetico *");}
| t=
{ return ( t.image +"\t\t Operador aritmetico *");}
| t=
{ return ( t.image +"\t\t Operador + ");}
| t=
{ return ( t.image +"\t\t Operador - ");}
| t=
{ return ( t.image +"\t\t Operador relacional >");}
| t=
{ return ( t.image +"\t\t Operador relacional <");}
| t=
{ return ( t.image +"\t\t Operador << ");}
| t=
{ return ( t.image +"\t\t Operador >> ");}
| t=
{ return ( t.image +"\t\t Operador ++ ");}
| t=
{ return ( t.image +"\t\t Operador -- ");}
| t=
{ return ( t.image +"\t\t Operador == ");}
| t=
{ return ( t.image +"\t\t Operador != ");}
| t=
{ return ( t.image +"\t\t Operador binario & ");}
| t=
{ return ( t.image +"\t\t Operador binario | ");}
| t=
{ return ( t.image +"\t\t Operador logico && ");}
| t=
{ return ( t.image +"\t\t Operador logico || ");}
| t=
{ return ( t.image +"\t\t Operador asignacion += ");}
| t=
{ return ( t.image +"\t\t Operador asignacion -= ");}
| t=
{ return ( t.image +"\t\t Operador asignacion *= ");}
| t=
{ return ( t.image +"\t\t Operador asignacion /= ");}
| t=
{ return ( t.image +"\t\t Operador asignacion %= ");}
| t=
{ return ( t.image +"\t\t Operador asignacion &= ");}
| t=
{ return ( t.image +"\t\t Operador asignacion |= ");}
| t=
{ return ( t.image +"\t\t Digito ");}
| t=
        { return ( t.image +"\t\t Identificador ");}
| t=
{ return ( t.image +"\t\t Letra ");}
| t=
{ return ( t.image +"\t\t Numero Entero ");}
| t=
{ return ( t.image +"\t\t Numero real ");}
| t=
{ return ( t.image +"\t\t Caracter no valido ");}
| t=
{ return ( t.image +"\t\t Cadena no valida ");}

}