UTNianos

Versión completa: [SINTAXIS] [PEDIDO] Final 12/12/2011
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
AFDR debe referirse a un automata que utiliza analisis descendente recursivo.

Recuerden que el parser puede utilizar analisis ascendente o descendente recursivo, y es una GIC, osea que un AFD lo debe reconocer..


De cualquier manera, tanto en AFDR, AFPND (no en AFPND), se pueden hacer transiciones sin meter simbolos en la pila: la transicion e (epsilon) no mete ningun simbolo.

Cita:como hicieron con el "módulo semántico" en una ocasión.

esa la hicieron porque en una parte del libro dice, claramente "existen rutinas de analisis semantico, pero no existe ningun modulo de analisis semantico"
puede ser que en el ejercicio 3 (el de los errores de la funcion) falte poner que en la linea 3 hay un error semantico porque el identificador "b" no esta definido? (cuando hace a < b en el for)
(16-12-2011 10:50)tenchology escribió: [ -> ]puede ser que en el ejercicio 3 (el de los errores de la funcion) falte poner que en la linea 3 hay un error semantico porque el identificador "b" no esta definido? (cuando hace a < b en el for)

yo iba a preguntar lo mismo, porque fijate que en la línea 4 sí te pone "el identificador sum no está declarado".
(16-12-2011 11:07)H3rnst escribió: [ -> ]
(16-12-2011 10:50)tenchology escribió: [ -> ]puede ser que en el ejercicio 3 (el de los errores de la funcion) falte poner que en la linea 3 hay un error semantico porque el identificador "b" no esta definido? (cuando hace a < b en el for)

yo iba a preguntar lo mismo, porque fijate que en la línea 4 sí te pone "el identificador sum no está declarado".

por eso, con mas razon. Si en sum esta el error, tambien deberia tenerlo b.

Y otra cosa con respecto a estos 2 errores: no estan "declarados" o "definidos"? A mi entender deberia ser "definidos" ya que las variables ocupan lugar en memoria, pero me gustaria cerciorarme con alguien que la tenga mas clara
En este caso creo que está bien poner que no estan declarados, más que nada por eso que dice que hay que analizarlo desde el punto de vista del compilador. Osea, en el momento de compilar salta el error de que el identificador no está declarado, después si uno lo declara habrá que ver si lo define o no, y será otra compilación con otro código.

Por otro lado he visto finales resueltos en donde marcan como error que "no está definida la variable ..." pero en el enunciado no dicen nada de analizar como si fuera el compilador. Dicen simplemente "encuentre los errores"
(16-12-2011 10:36)gonnza escribió: [ -> ]
Cita:como hicieron con el "módulo semántico" en una ocasión.
esa la hicieron porque en una parte del libro dice, claramente "existen rutinas de analisis semantico, pero no existe ningun modulo de analisis semantico"

Sí, pero digo que hacen esas cosas. Como "semánticamente correcto implica sintácticamente correcto" o "constantes booleanas". O sea, son cosas que leyendo uno debe saber pero juegan mucho con las palabras.

Igual es probable que lo del AFDR sea lo que vos decís, pero la verdad que me da fiaca buscarlo =P




(16-12-2011 14:57)H3rnst escribió: [ -> ]En este caso creo que está bien poner que no estan declarados, más que nada por eso que dice que hay que analizarlo desde el punto de vista del compilador. Osea, en el momento de compilar salta el error de que el identificador no está declarado, después si uno lo declara habrá que ver si lo define o no, y será otra compilación con otro código.

Por otro lado he visto finales resueltos en donde marcan como error que "no está definida la variable ..." pero en el enunciado no dicen nada de analizar como si fuera el compilador. Dicen simplemente "encuentre los errores"

en uno de los volúmenes hay una explicación de declaración y definición, con el viejo y querido ejemplo del "struct" y "typedef", sería algo como lo de semántica de pratt tomado en el final de agosto.
(16-12-2011 14:57)H3rnst escribió: [ -> ]Osea, en el momento de compilar salta el error de que el identificador no está declarado, después si uno lo declara habrá que ver si lo define o no, y será otra compilación con otro código.

Una consulta. ¿Como sería en ANSI C el caso de declarar un identificador pero NO definirlo?

Es decir, si yo tengo:
int a; /* lo estoy definiendo */

(16-12-2011 19:46)proyectomaru escribió: [ -> ]Como "semánticamente correcto implica sintácticamente correcto" o "constantes booleanas". O sea, son cosas que leyendo uno debe saber pero juegan mucho con las palabras.
¿Cual es la trampa de semánticamente correcto implica sintácticamente correcto? ¿Para el compilador o para el usuario?

Gracias!
(17-12-2011 01:43)Ident escribió: [ -> ]
(16-12-2011 14:57)H3rnst escribió: [ -> ]Osea, en el momento de compilar salta el error de que el identificador no está declarado, después si uno lo declara habrá que ver si lo define o no, y será otra compilación con otro código.

Una consulta. ¿Como sería en ANSI C el caso de declarar un identificador pero NO definirlo?

Es decir, si yo tengo:
int a; /* lo estoy definiendo */

(16-12-2011 19:46)proyectomaru escribió: [ -> ]Como "semánticamente correcto implica sintácticamente correcto" o "constantes booleanas". O sea, son cosas que leyendo uno debe saber pero juegan mucho con las palabras.
¿Cual es la trampa de semánticamente correcto implica sintácticamente correcto? ¿Para el compilador o para el usuario?

Gracias!

Cito al libro de K&R:
Cita:La palabra "definición" se refiere al lugar donde se crea la variable o se le asigna un lugar de almacenamiento; "declaración" se refiere al lugar donde se establece la naturaleza de la variable pero no se le asigna espacio.(pág 36)

para mí la diferencia era que declarar era decir por ejemplo " int a; ", osea declaraste a como variable de tipo int. Y definirla era asignarle un valor. Que alguien me corrija si estoy mandando fruta.

Y con respecto a lo de "semánticamente correcto implica sintácticamente correcto" para mi sería verdadero. El libro dice que las rutinas semánticas son las encargadas de verificar que no haya errores que el análisis sintáctico no puede detectar (lo que no quiere decir que esté libre de errores). El parser es el que invoca a esas rutinas, no? Osea que si es semánticamente correcto, debería ser sintácticamente correcto. Al revés es falso.
declaracion seria por ej cuando haces un typedef (asi era ?) y declaras un struct, para saber la "forma", pero no asignas ninguna variable ni nada en ningun lado

Definir es cuando haces int a; porque le asignas un espacio en memoria (por mas que el valor tenga basura)
Vos pensa que haces int a y podes usarlo, (si de casualidad el valor ahi es util), osea, ya ocupa lugar en memoria
Entonces en la respuesta del final, lo correcto no sería haber puesto "El identificador sum no está definido" ?

¿Y no falta también la definición de la variable 'b' que está en la segunda cláusula del for ?
Lo del 'b' en el for para mi tenes razon, ahi se lo comieron


Sobre lo del sum...
Ahora me dejas la duda.
Pero tambien hay que tener en cuenta que antes de requerir el valor para hacer la cuenta tiene que verificar los tipos para ver si es valido la suma en esos operadores, y si no sabemos el tipo de dato de sum, es porque no esta declarado (nota de pie: definicion incluye declaracion, porque ya tenes el tipo de dato. Onda, podes declarar sin definir, pero no podes definir sin declarar previamente)
No me queda claro lo que dice K&R. ¿Como establezco la naturaleza de la variable sin asignarle espacio? ¿Establecer la naturaleza sería darle un tipo de dato?

Al margen de eso, si nos fijamos en las páginas 73 y 74 del VOL I, dice que por ejemplo int a; es una DEFINICIÓN. Según este volumen, son DECLARACIONES los prototipos de funciones y los struct (cuando se explicita su estructura interna).

Para mí lo de "semánticamente correcto implica sintácticamente correcto" también es correcto.


Saludos y gracias,
Cita:¿Como establezco la naturaleza de la variable sin asignarle espacio? ¿Establecer la naturaleza sería darle un tipo de dato?

si yo quieri definir un struct, estoy estableciendo la naturaleza de un tipo de dato. Un struct conformado por un int y un char, ponele que se llama "bla" es un nuevo tipo de dato


yo hago struct bla ident;

entonces tengo variable que se llama "ident" de tipo bla

se entiende ?
Sí, creo que entendí. "Establecer la naturaleza" es (como dice la citación del K&R) declarar por ejemplo un tipo de dato.

Con respecto a si en la resolución del final debería decir "definido" o "declarado", es muy fino... La realidad es que ni sum ni b están definidos. Eso es cierto.
Páginas: 1 2
URLs de referencia