COMPILADORES II Capítulo I: Análisis sintáctico y semántico • Sea el atributo sintetizado val que da el valor del número binario generado por S en la siguiente gramática. Por ejemplo, con la entrada 101.101 S.val = 5.625 S!L.L|L L!LB|B B!0|1 • Utilícense atributos sintetizados para determinar S.val. • Supóngase que se tienen las siguientes declaraciones en C: typedef struct{ int a, b; }NODO, *APNODO; NODO aa[100]; APNODO bb(int x, NODO y){ . . . } Escríbanse expresiones de tipo para los tipos aa y bb. Capítulo II y III: Generación de código objeto y optimización de código objeto • Genérese código para las siguientes proposiciones en C para la máquina objeto, suponiendo que todas las variables son estáticas. Supóngase que hay tres registros disponibles. • x = a[ i ] + 1 • a[ i ] = b[c[ i ] ] • Considérese el programa para la multiplicación de matrices de la figura siguiente. begin for i:= 1 to n do for j:= 1 to n do 1 c[i,j] := 0; for i:= 1 to n do for j:= 1 to n do for k:= 1 to n do c[i,j] := c[i,j] + a[i,k]* b[k,j] end Suponiendo que a a, b y c se les ha asignado memoria estática y que hay cuatro bytes por palabra en una memoria direccionada por bytes, prodúzcase proposiciones de tres direcciones par el programa de la figura. • El programa de la figura siguiente, cuenta números primos desde 2 a n utilizando el método de la criba sobre una matriz debidamente grande. begin read n; for i:= 2 to n do a[i]:= true; cuenta := 0 for i:= 2 to n** .5 do if a[i] then begin cuenta := cuenta + 1; for j:= 2*i to n by i do a[j] := false; end print cuenta; end tradúzcase el programa a proposiciones de tres direcciones suponiendo que a tiene asignada memoria estática. 2