<html>
<head>
<style>
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
</style>
</head>
<body class='hmmessage'>
Hola a todos, antes que nada  feliz año nuevo!!!!!<br><br>Gracias por tu propuesta programante! Lo he estado probando pero me he hecho un lío, finalmente he decidido probar una representacion diferente:<br><br><font style="" color="#7030a0">struct Casilla{</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">    char* x;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">    struct Casilla* next;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">};</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">struct Produccion{</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">    char partIzq;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">    Casella partDcha;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">};</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">class Gramatica{</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">    </font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">    private:</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">        char* Sn;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">        char* St;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">        Produccion P;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">        char S;</font><font style="" color="#7030a0"><br></font><font style="" color="#7030a0">};</font><br><br>La idea es que si quiero entar, por ej:<br><font style="" color="#00b050">S-> ASA | Sa | aa</font><br>S sea la parte Izq<br>y todo lo demas la dcha (esto es como antes)<br>y entonces<br>guardar en el 1er char ASA y apuntar al siguiente<br>No tengo muy claro si esto es muy adecuado, aunque creo que puede quedar bien. Sin embargo, creo que voy a necesitar un apuntador para saber donde estoy, pero no se donde ponerlo, que lo pongo en Produccion?? pero tendria que ser de tipo casilla, no?? bufff estoy hecha un lio, podeis echarme una mano, por favor??<br><br>Gracias a todos.<br><br>PS: Os dejo todas las conversaciones anteriores por si no os acordais muy bien de que va mi programilla<br><br><br>> Date: Sat, 27 Dec 2008 23:02:48 +0100<br>> To: cconclase@listas.conclase.net<br>> From: programante@gmail.com<br>> Subject: Re: [C con Clase] problemazo de diseño<br>> <br>> Núria Busom Figueres escribió:<br>> > Hola a todos,<br>> ><br>> > estoy haciendo un programa que trabaja con gramáticas (automátas) y<br>> > bueno... de momento todavía estoy programando el codigo para que el<br>> > usuario me pueda entrar la gramática que quiera. Para los que no esten<br>> > muy familiarizados con el tema se trata de una cosa así:<br>> > G=({S, A, B,...}, {a, b, c,...}, P, S),  el tamaño del 1er y 2º campo<br>> > los entra el usuario mediante int main(int argc, char* argv[])<br>> >    (el 1er campo está formado por el alfabeto de no terminales<br>> >    el 2º campo por el alfabeto de terminales<br>> >    S es el simbolo inicial)<br>> >    P es el conjunto de producciones, que empezando por cada uno de uno<br>> > de los simbolos del 1er campo, sería del estilo:<br>> >     S-> SA | A<br>> >     A-> AaA | aa | B<br>> >     B->...<br>> ><br>> > Para representar todo esto he creado la clase Gramatica:<br>> ><br>> > struct Produccion {<br>> >     char* parteIzq;<br>> >     char*** parteDcha; ???????<br>> > };<br>> ><br>> > class Gramatica{<br>> >         char* Sn;<br>> >         char* St;<br>> >         Produccion P;<br>> >         char S;<br>> > ...};<br>> ><br>> > por ejemplo en : A-> AaA | aa | B llamaré parteIzq a 'A' y parteDcha a<br>> > 'AaA | aa | B'<br>> > Y aquí viene mi problema:<br>> > _*no se como representar la parteDcha !!!!!*_ Problemas que tengo:<br>> > · 1º: no sé como de largo será<br>> > · 2º: si lo represento como un vector, en cada una de las casillas<br>> > puede haber más de un carácter<br>> > Por ejemplo, si la gramatica fuera:<br>> > G=({S, A, B}, {a, b}, P, S)<br>> > S-> SA | A<br>> > A-> AaA | aa | B<br>> > B-> bb<br>> > entonces el usuario tendria que llamar el programa mediante "gram 3 2"<br>> > y mi programa ppal recogería num_prod=3 y num_elem=2, por lo que ya<br>> > podría hacer Sn=new char[3] y St=new char[2];<br>> > y en lo referente a P, tendría:<br>> > parteIzq=new char[3]; y parteDcha=new char[3]; y a partir de aquí me<br>> > pierdo:<br>> ><br>> > parteDcha estaría formada por {S, A, B}, pero cada uno de estos<br>> > tendría que ser un vector de largada yo_que_sé y encima con esto no<br>> > sería suficiente ya que como en una casilla no podría poner, por<br>> > ejemplo, 'AaA', necesitaria que cada casilla apuntara a otro vector de<br>> > largada desconocida....<br>> ><br>> > Bueno, y hasta aquí mi GRAN DILEMA, me he alargado mucho, ya lo sé<br>> > pero quería que se entendiera bien mi duda. Finalmente, mis preguntas:<br>> ><br>> > - hay alguna forma mejor de representarlo??<br>> > - existe char***?? (ya me imagino que no, pero algo similar...)<br>> ><br>> > Bueno, pues esto es todo<br>> ><br>> > Muchas gracias a todos!!!!<br>> <br>> Sí, existe char*** que no es más que un puntero a char**, que es a su<br>> vez un puntero a char*, o lo que es lo mismo, a un puntero a caracteres.<br>> No obstante, hacerlo así es complicado y requiere pericia al trabajar<br>> con tantos punteros.<br>> Te aconsejo usar clases.<br>> Podrías usar algo así:<br>> map<string, vector<string> > Producciones;<br>> <br>> Entonces representarías<br>> S-> SA | A<br>> A-> AaA | aa | B<br>> como:<br>> vector<string> ParteDerecha;<br>>  ParteDerecha.push_back("SA");<br>>  ParteDerecha.push_back("A");<br>> Producciones["S"] = ParteDerecha;<br>>  ParteDerecha.push_back("AaA");<br>>  ParteDerecha.push_back("aa");<br>>  ParteDerecha.push_back("B");<br>> Producciones["A"] = ParteDerecha;<br>> <br>> El problema que vas a tener es verificar si un texto pertenece o no a la<br>> gramática, lo cual lleva a las técnicas de procesadores que están<br>> seguramente más allá de lo que esperas.<br>> <br>> <br>> _______________________________________________<br>> Lista de correo Cconclase Cconclase@listas.conclase.net<br>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net<br>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ<br><br /><hr />Acceso muy fácil al uso compartido de fotos con Fotos de Windows Live™. <a href='http://www.microsoft.com/windows/windowslive/photos.aspx' target='_new'>Arrastrar y colocar</a></body>
</html>