C/Visual C - NEcesito ayuda reconocer lenguaje

 
Vista:

NEcesito ayuda reconocer lenguaje

Publicado por sofia (1 intervención) el 23/03/2006 17:40:45
Hola,
me gustaria que me ayudarais a resolver un porblemilla que tengo en una pratica.
Consiste en hacer un programa,que se le introduzca me diante un fichero un lenguaje, formado por cualquier grupo de palabras, y seguida cada una de elleas, con el tipo de palabra que es (plurar,masculino,verbo,nombre....), una vez cargado este lenguaje, se pueden introducir frases compuestas por estas palabras y que el propio programa, comprueba palabra a palabra y detras de cada una de ellas, indique a que grupo pertenece.
Principalmente el problema es que no se como hacer para agrupar las palabras en los tipos que a continuacion de cada una me explica que es.
Muxas gracias x la ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:NEcesito ayuda reconocer lenguaje

Publicado por Juanma (1 intervención) el 24/03/2006 03:05:23
Podrias hacerlo con arrays, viendo los ultimos caracteres de cada array, q al fin y al cabo, es lo unico q necesitas para saber de q tipo de palabra se trata. Despues guardar esos ultimos caracteres en otra variable (o usando el mismo array, pero a mi parecer es mas complejo) y utilizar una estructura tipo Switch Case con esa variable para determinar el tipo de letra.

Si introducen una frase y tienes q decir q el tipo de cada una de las palabras, puedes hacer las separaciones hasta encontrar un espacio en blanco en el array (en ASCII creo q era el codigo 32) y despues el proceso q dije antes: Coger las ultimas posiciones del array, entrar en un Switch Case y decir el tipo.

No parece bastante complicado.

PD: Estamos hablando de hacerlo en C o C++, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:NEcesito ayuda reconocer lenguaje

Publicado por fernando.gomez (1603 intervenciones) el 24/03/2006 19:22:19
Aunque no es tan complicado, lo que quieres hacer es crear un analizador sintáctico. Yo en lo personal te recomendaría una estructura de árbol, porque con arrays no puedes establecer jerarquías (de hecho, los compiladores trabajan con árboles). Por ejemplo, supongamos que hay que evaluar la expresión:

P => (A & B)

esto es, P implica A y B. A&B es una expresión que junto con P forman una expresión binaria. Pero A&B es a su vez una expresión binaria. De ahí que la estructura de árbol sea la correcta:

raiz
|
+ operador: =>
+ expr1: P
+ expr2 :
. |
. + operador: &
. + expr1: A
. + expr2: B

Si te das cuenta, tenemos un árbol binario, de tal suerte que éste es llenado al analizar el texto (en mi caso yo uso operadores, en el tuyo, empleas tus palabras o frases que comentabas). Cuando comienzas a analizar el texto, te creas el árbol vacío, sólo con la raíz. En nuestro ejemplo:

expresión a evaluar: P => A&B

encontramos P, la insertamos en la primera expresión del primer nodo. Encontramos =>, y entonces vemos que es un operador, lo insertamos en operador. Luego la siguiente expresión vemos que es compuesta (porque tiene otro operador). Entonces en el nodo de expr2 insertamos un nuevo nodo hijo, determinamos que A estará en expresión 1, & es el operador, y B estará en expresión 2.

Luego, para evaluar esto, tenemos que ir de abajo hacia arriba. Evaluamos A&B, y con este resultado temporal, llamémosle T, evaluamos P => T.

Esta es más o menos la idea de un analizador sintáctico, espero te sirva. Hay que considerar otros detalles, como la presedencia de operadores (o tus palabras clave, en este caso). Pero usualmente este es el camino a seguir.

Hay un libro que quizás te sirva: "Máquinas, autómatas y lenguajes", publicado por Addison Wesley... no recuerdo el autor, lo checo y te lo paso.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar