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