Closed inrainmoi closed 9 months ago
El profesor habia comentado que las divisiones no las aplicariamos al tipo INT, para evitar que ocurran asignaciones de numeros de punto flotante al INT
Por ejemplo, evitar:
int a;
a = 5 / 2;
De modo que las gramáticas que estoy aplicando para la semántica quedarían de la siguiente manera: T_INT => int INT_OP => ADD | SUB | MUL
T_FLOAT => float FLOAT_OP => ADD | SUB | MUL | DIV
G => T_INT = T_INT INT_OP T_INT | T_FLOAT = (T_INT | T_FLOAT) FLOAT_OP (T_INT | T_FLOAT)
La otra opción, para que puedan realizarse divisiones con el tipo INT, es aplicar lo de C: Truncar cualquier valor de tipo FLOAT antes de realizar la asignación.
Para el analizador semantico se usa otra gramática que valide que los tipos de datos usados en la instrucción sean válidos.
int x; x = 3.7 * 6;
N_INT -> int N_INT_O -> ADD | SUB | MUL | DIV
Un int no se puede multiplicar con float como se indica en la gramatica.