4) ¿La asignación en Pascal y la expresión de asignación en ANSI C,
> tienen la misma semántica? Pagina 72. Libro 1. Ejercicio 15.
> En Pascal, a := 3 ya es una sentencia.
> En ANSI C, a = 3 es una expresión de asignación
Son diferentes desde el nivel sintáctico y semántico. La diferencia sintáctica es obvia, la semántica es que uno tiene el comportamiento de sentencia y otro de expresión.
Durante el análisis léxico, todos los identificadores, y por ende el sublenguaje de palabras reservadas, requieren leer un carácter extra para encontrar el fin del lexema (por ende todos llaman a ungetc)
delimitada apostrofos o comillas no usa ungetc
Si tiene prefijo comun como el =, +,* (u otros) necesita ungetc. Por ejemplo el "+" necesita "++" no, por que cuando lee el segundo + ya sabe que ahi termino. En cambio cuando lee el primer + le podria seguir otro + o un =
Scanner no ignora los espacios por que sino como interpreta int a; No ignora el espacio en el literal cadena ni en el literal caracter
Si el lexema es operador y también es puntuación, se lo toma como operador, si no, como puntuación.
Es así ya que la coma está separando elementos de la lista de parámetros de la función.
Sería operador cuando se la usa en una lista de expresiones, concatenándo una de otras.
En el caso de las declaraciones (y tambien en los > llamados) de funcion, actua como caracter de puntuacion,
porque esta separando los parametros.
En cambio si tenes algo asi como bar=2,3 ahi es un operador.
Aunque no ocurre lo mismo con la lista de parámetros en la definición de una función (diferente a invocación y a prototipo de una función) y con las inicializaciones (que son opcionales en algunas declaraciones).
Por ejemplo, para sentencias de selección y de iteración, no son operadores, son símbolos de puntuación que se utilizan para delimitar la expresión. ( aca explica por que con printf pone a los parentesis como operadores y dps cuando lo usas en el while, if como signos de puntuacion)
int f(int, dobule), a[MAX+1];
los corchetes del vector aca son caracter de puntuacion,
estoy declarando ese registro!
mientras que en el caso de ejecución cuando queres acceder a una
posicion del mismo, vec[1] son operador.
AFD que reconoce (a+b)*. El complemento de ese AFD
Es el L vacio osea L={} (cardinalidad 0) que no es lo mismo que L={e} (cardinalidad 1)
Sizeof Es una palabra reservada que actúa como operador.