cer-0 / 5cv14

Práctica de la materia de compiladores
0 stars 0 forks source link

Agregar analizador semantico para asignaciones. #10

Closed inrainmoi closed 9 months ago

inrainmoi commented 9 months ago

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.

DavidENicolasC commented 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)

DavidENicolasC commented 9 months ago

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.