import java.awt.*;
import hsa.Console;
public class Gramatica
{
static Console c;
public static void main (String args[])
{
c = new Console ();
c.println ("*** Programa que determina si una gramatica es vacia ***");
c.println ("");
c.println ("Introduzca Variables (introduzca preferentemente simb en MAYUSCULAS)");
c.println ("Introduzca el numero de elementos v");
int nv = c.readInt ();
c.println ("Introduzca Variables");
String v[] = new String [nv];
for (int i = 0 ; i < nv ; i++)
{
v [i] = c.readString ();
}
c.println ("Introduzca el numero de elementos Terminales");
int nt = c.readInt ();
c.println ("Introduzca Terminales");
String T[] = new String [nt];
for (int i = 0 ; i < nt ; i++)
{
T [i] = c.readString ();
}
String s = v[0];
c.println ("S = "+ s);
c.println ("Introduzca P:");
int nr = nv;
c.println ("Introduzca el numero reglas de Produccion "+ nr);
String P[] [] = new String [nr] [5];
for (int i = 0 ; i < nr ; i++)
{
c.println ("Regla " + (i+1));
P [i] [0] = c.readString ();
c.println ("Numero de cadenas de la Regla de Produccion");
int nc = c.readInt ();
c.println ("Introduzca la cadena de la Regla de Produccion");
for (int j = 1 ; j <= nc ; j++)
{
P [i] [j] = c.readString ();
}
}
c.clear ();
c.println ("*** Programa que determina si una Gramatica es Vacia o No ***");
c.println ("");
c.print ("V = {");
for (int i = 0 ; i < nv - 1 ; i++)
{
c.print (v [i] + ", ");
}
c.println (v [nv - 1] + "}");
c.print ("T = {");
for (int i = 0 ; i < nt - 1 ; i++)
{
c.print (T [i] + ", ");
}
c.println (T [nt - 1] + "}");
c.println ("S = " +v[0]);
c.println ("");
c.println ("P: ");
for (int i = 0 ; i < nr ; i++)
{
c.print (" ");
c.print (P [i] [0]);
c.print (" = ");
for (int j = 1 ; j < 5 ; j++)
{
if (P [i] [j] != null)
c.print (P [i] [j]+ ", ");
}
c.println ( ", ");
}
String t = "";
for (int i = 0 ; i < nt ; i++)
{
t = t + T [i];
}
//determinar vacia
String Nuevo = " ", Anterior = " ";
String TUAnterior = t + Anterior;
c.println (" Nuevo Anterior TUAnterior ");
c.println (" " + Nuevo + " " + Anterior + " " + TUAnterior);
String aux, aux1, aux2, aux3;
String nuevo = "";
int m;
do
{
Anterior = Nuevo;
for (int i = 0 ; i < TUAnterior.length () ; i++)
{
aux = TUAnterior.substring (i, i + 1);
for (int j = 0 ; j < nr ; j++)
{
for (int k = 1 ; k < 5 ; k++)
{
aux1 = P [j] [k];
if (aux1 != null)
{
for (int l = 0 ; l < aux1.length () ; l++)
{
aux2 = aux1.substring (l, l + 1);
if (aux.compareTo (aux2) == 0)
{
if (nuevo != "")
{
for (m = 0 ; m < nuevo.length () ; m++)
{
aux3 = nuevo.substring (m, m + 1);
if (aux3.compareTo (P [j] [0]) == 0)
break;
}
if (m == nuevo.length ())
nuevo = nuevo + P [j] [0];
break;
}
else
nuevo = nuevo + P [j] [0];
}
}
}
}
}
}
Nuevo = nuevo;
}
while ((Nuevo.compareTo (Anterior) < 0) || (Nuevo.compareTo (Anterior) > 0));
c.println (" " + Nuevo);
int e;
String aux4;
for (e = 0 ; e < Nuevo.length () ; e++)
{
aux4 = Nuevo.substring (e, e + 1);
if (aux4.compareTo (s) == 0)
break;
}
if (e == Nuevo.length ())
c.println ("La Gramatica es VACIA");
else
c.println ("La Gramatica NO es VACIA");
}
}
|