UTNianos

Versión completa: TP Sintaxis
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Hola resulta que tengo un TP de sintaxis y este cuatrimestre estoy medio perdido D:, el TP es el siguiente:

Spoiler: Mostrar
TRABAJO PRÁCTICO
AUTÓMATA RECONOCEDOR/ACCIONADOR

Sea un texto formado por una secuencia de caracteres que corresponden a un programa en ANSI C correcto. El texto completo termina con el carácter especial fdt.

Ejemplo: int main(void) { printf(“Hola\n”);} fdt

 Construya la TT del AFD que procesa este texto, analizando todos los lexemas de los Lenguajes Regulares que tiene ANSI C - tokens. (Identificador, constanteEntera, constanteReal, operadorAsignación, puntoyComa, coma, parenDerecho, parenIzquierdo, otrosCaracPuntuación, literalCadena). Fuera de estos tokens, cualquier otro lexema corresponderá al token Otros. Los espacios en blanco deben ser ignorados.

 Agregue una última columna a la TT para indicar en qué estados se van realizando las diferentes acciones.

 Escriba, en ANSI C, la función Automata que realiza estas tareas.

 Tenga en cuenta el carácter especial fdt y la posibilidad de espacios en blanco.

 Cada vez que detecta un lexema debe mostrar por pantalla el lexema y a qué token pertenece.

 Recuerde que deberá guardar el lexema para poder mostrarlo, para ello, utilice una cadena auxiliar.


la verdad que no sé muy bien como empezar, cual se supone que sería el alfabeto reconocido por el automata? no pido que me me den nada hecho solo que me encaminen un toque para saber como encarar el automata, gracias.
Yo estoy en la misma, estoy medio perdido, si queres agregame al fb y lo vemos.
(26-08-2014 12:07).-Fede-. escribió: [ -> ]Yo estoy en la misma, estoy medio perdido, si queres agregame al fb y lo vemos.

Te mandé un mensaje no me deja agregarte :/
Si alguno sabe como arrancar tambien me serviria, mas o menos entiendo los que hay de ejemplo pero este no :/
Tamos todos iguales, calculo que somos todos del mismo curso, o de la misma profesora en su defecto..
El tema es que hay que entregarlo el viernes (en mi caso) y no tengo la menor idea de por donde empezar..
Si alguien tiene alguna idea que avise, pero yo ya me resigne...
(26-08-2014 21:18)florenciaviolencia escribió: [ -> ]Tamos todos iguales, calculo que somos todos del mismo curso, o de la misma profesora en su defecto..
El tema es que hay que entregarlo el viernes (en mi caso) y no tengo la menor idea de por donde empezar..
Si alguien tiene alguna idea que avise, pero yo ya me resigne...
.
Yo tambien soy del curso del jueves a la tarde. Te mande un mail =P
Hola! Yo también tengo que hacer este tp, pero curso turno noche. Les mande solicitud a fb para ver si podemos hacer algo.

Slds.
yo soy del curso de los viernes. Tambien tengo que hacer el tp. Ya lo habia mirado y empecé a hacerlo despues subo una foto masomenos de como lo tengo.

Yo lo primero que hice fue definir los "alfabetos" que se usan ( digitos, nodigitos, digitosnocero) basandome en como se arman los identificadores, const enteras reales, etc de la bnf de ansii c. y de ahi arme un automata para cada token.
por ahora slo tengo el de identificador y constante entera decimal. Calculo que despues solo sera unir todos los automatas en uno y ubicar las acciones. (por lo menos asi lo pense yo =P ).

Ej:

Para los identificadores:
digito = {1234567890}
nodigito = {_abc...zABC....Z}

0' -> fdt -> 4+
......-> nodigito-> 1 -> digito -> 1
...........................-> nodigito -> 1
...........................-> espacioblanco -> 2 -> espacioblanco -> 3 -> espacioblanco -> 3
........................................................................................-> fdt -> 4+
.........................................................-> fdt -> 4+
(27-08-2014 10:59)demian escribió: [ -> ]yo soy del curso de los viernes. Tambien tengo que hacer el tp. Ya lo habia mirado y empecé a hacerlo despues subo una foto masomenos de como lo tengo.

Yo lo primero que hice fue definir los "alfabetos" que se usan ( digitos, nodigitos, digitosnocero) basandome en como se arman los identificadores, const enteras reales, etc de la bnf de ansii c. y de ahi arme un automata para cada token.
por ahora slo tengo el de identificador y constante entera decimal. Calculo que despues solo sera unir todos los automatas en uno y ubicar las acciones. (por lo menos asi lo pense yo =P ).

Ej:

Para los identificadores:
digito = {1234567890}
nodigito = {_abc...zABC....Z}

0' -> fdt -> 4+
......-> nodigito-> 1 -> digito -> 1
...........................-> nodigito -> 1
...........................-> espacioblanco -> 2 -> espacioblanco -> 3 -> espacioblanco -> 3
........................................................................................-> fdt -> 4+
.........................................................-> fdt -> 4+

Ahora me parece que tengo un toque más de idea, no entendí lo de espacioblanco, no sé supone que no tenemos que tenerlo en cuenta?? cómo se haría para juntar todos los automatas??
Acá intenté hacer la de LiteralCadena me quedo así

0- -> fdt -> 3+
0- -> " -> 1
1 -> nodigito -> 1
1 -> digito -> 1
1 -> " -> 2
2 -> fdt -> 3+

Gracias por responder =D
Hola, claro. Yo lo pensé así. Pasa que todos los identificadores están separados por espacios, osea, use el espacio en blanco para cortar el identificador. En ansi C no podes tener un identificador de dos palabras (en ningun lado bah), entonces ahi corto y leo, despues de eso viene otra cosa que no se que es.
Para mi, si no lo enes en cuenta, en cuanto encuentres un identificador vas a seguir leyendo el identificador hasta que no leas algo que no sea de los identificadores ( , ; () etc) y tomarias por ejemplo:

int numero = 0; ahi int numero seria identificador y no lo es.

Pero no se, no esta claro...


Para juntarlos para mi tenes que poner a todos en el mismo cero y dar la posibilidad de a la salida de uno entrar en otro. Un ejemplo seria:

del 2 del tuyo -> nodigito -> 1 y asi los vas enlazando para tener todas las posibilidades(haciendo la tabla vas viendo mejor que te falta unir)


PD: en el tuyo te faltarian del literal cadena los : . º osea otros carateres de puntuacion que pueden ser literal cadena me parece. Por ejemplo el literal cadena "El resultado de 3 + 3 es: 9, y es impar"
Intenté hacer el de constanteReal y me perdí en el medio, me quedó algo así

0 -> digito, constanteFraccionaria ->1+
0 -> fdt -> 3+
1 -> digito ->1+
1 -> e, E -> 2+
2 -> sufijoReal -> 3+

y la parte de constanteFraccionaria como
0-> digito -> 0
o-> . -> 1+
1 -> digito -> 2+
2- > digito 2+

como dije, me perdi en lo que hay que hacer asi que probablemente este mal :/
hola solemba, te hago una corrección rápida y después lo veo bien, si vos pones (unnumero) +, ese + dice que esa instancia es terminal, ese nodo es terminal. Por eso solo se pone en el nodo final.

Lo que hay que hacer es poner nodos unidos con caminos. Estos caminos representan el agregado de algo a la cadena que tenes. Ejemplo:

1-> digito ->2+ ese automata solo reconoce: 0 , 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 y nada más.

1-> digito ->2+
-> digito ->1 este automata reconoce lo mismo del anterior y todas las secuencias de numeros que vos quieras hacer, infinitas.

Se entiende mas o menos?
Se que el + va en el final, pero me quedaban todos finales en un momento, asi que algo esta mal de entrada XD

eso ultimo seria mas o menos como poner un 1 -> digito -> 1 ? mentalmente lo imagino como un bucle en el estado 1, capaz lo tengo mal representado
Si, seria como un bucle. No se como lo pensaste pero te tiro masomenos una idea.

Para armar el autómata yo lo pienso así:

1º- Agarro y pongo el nodo cero.
2º- Me fijo con que puede llegar a empezar lo que quiero que entienda y lo pongo como caminos hacia el nodo 1.
3º- Ahí me fijo que puede tener después del primer carácter y los pongo como bucles en el nodo 1.
4º- Veo hasta cuando se pueden agregar cosas ( osea si hay algo que corte, por ejemplo un exponente fraccionario que te corta el ingreso del numero) y pongo un camino que agregue ese corte hasta el nodo 2.
5º- Acá vendrían las acciones y después todos los caminos posibles de salida que serian:
- El mismo camino de corte pero en bucle
- Las salidas hacia el nodo uno por el mismo que va del cero a uno
- Las salidas a otros autómatas
- El camino fdt

El camino fdt va al 3+. Y ahí termina el autómata.
Páginas: 1 2
URLs de referencia