Prévia do material em texto
Revisar envio do teste: Exercício de apoio - Semana 7 Linguagens e Compiladores - EEL101 - Turma 001 Semana 7 Revisar envio do teste: Exercício de apoio - Semana 7 Pergunta 1 Resposta Selecionada: Respostas: Comentário da resposta: Qual é o código gerado? Considere que a árvore está correta para a expressão “a:=x*y+z”. T1 := x * y || T2 := T1 + z || a := T2 a := T1 + z || T1 := x * y T1 := x * y || T2 := T1 + z || a := T2 T2 := x * y || T1 := T2 + z || a := T2 a := T2 || T1 := x * y || T2 := T1 + z a := x * y A resposta correta é: T1 := x * y || T2 := T1 + z || a := T2 Pergunta 2 Resposta Selecionada: Respostas: Comentário da resposta: Qual código completaria o esquema de tradução para gerar código corretamente? E.nome := geratemp; E.cod = E1.cod || T.cod || geracod(E.nome “:=” E1.nome “+” T.nome) E.nome := geratemp; T.cod || geracod(E.nome “:=” E1.nome “+” T.nome) E.nome := E1.nome; E.cod = E1.cod || T.cod || geracod(E.nome “:=” E1.nome “+” T.nome) E.nome := E1.nome; E.cod = E1.cod || geracod(E.nome “:=” E1.nome “+” T.nome) E.nome := geratemp; E.cod = E1.cod || T.cod || geracod(E.nome “:=” E1.nome “+” T.nome) E.nome := geratemp; E.cod = E1.cod || T.cod || geracod(E.nome “:=” T.nome) E.nome := geratemp; E.cod = E1.cod || T.cod || geracod(E.nome “:=” E1.nome “+” T.nome) https://ava.univesp.br/webapps/blackboard/execute/courseMain?course_id=_7263_1 https://ava.univesp.br/webapps/blackboard/content/listContent.jsp?course_id=_7263_1&content_id=_941482_1&mode=reset Pergunta 3 Resposta Selecionada: Respostas: Comentário da resposta: Se a expressão encontrada no código fonte fosse “a:=x*y+z*r”, qual seria o código gerado? Considere a árvore anterior e a complete para responder a essa questão. T1 := x * y || T2 := z * r || T3 := T1 + T2 || a := T3 T1 := x * y || T2 := T1 + r || T3 := T2 * z || a := T2 T1 := x * y || T2 := z * r || a := T2 T1 := x * y || T2 := T1 + z || T3 := T2 * r || a := T1 T1 := x * y || T2 := z * r || a := T1 T1 := x * y || T2 := z * r || T3 := T1 + T2 || a := T3 A resposta correta é: T1 := x * y || T2 := z * r || T3 := T1 + T2 || a := T3 Pergunta 4 Resposta Selecionada: Respostas: Comentário da resposta: Se o código de três endereços empregado no esquema de tradução fosse substituído pelo código objeto da JVM (para valores inteiros), quais mudanças precisariam ser feitas no código do esquema de tradução para a geração da adição (E → E1 + T)? Considere que as variáveis estão organizadas na ordem em que aparecem da esquerda para a direita, assim a variável para “E” está indexada como 0, as demais, em ordem crescente. Considere também que o resultado de cada sub- expressão é deixado no topo da pilha. E.cod = E1.cod || T.cod || geracod(iadd || istore 0) iconst_0 || istore 0 || ipush 0 || E.cod = E1.cod || T.cod || geracod(dadd || istore 0) E.cod = E1.cod || T.cod || geracod(iadd || istore 0) E.cod = E1.cod || iload 2 || T.cod || iload 3 || geracod(iadd || istore 1) E.cod = E1.cod || T.cod || geracod(iadd || istore 2) E.cod = E1.cod || istore 2 || T.cod || istore 3 geracod(ipush 2 || ipush 3 || ladd || istore 1) A resposta correta é: E.cod = E1.cod || T.cod || geracod(iadd || istore 0) Pergunta 5 Segunda-feira, 21 de Novembro de 2022 16h18min23s BRT Resposta Selecionada: Respostas: Comentário da resposta: Considerando o código gerado para a expressão da questão 1, há alguma otimização evidente? Há alguma forma simples de melhorar o código gerado? Há, uma delas é na função geratemp que não reutiliza temporários. Não há, porque a única melhoria possível envolve processar todo o código gerado. Há, basta trocar a ordem dos operandos. Não há, somente aplicando alguma otimização como “peephole”. Há, uma delas é na função geratemp que não reutiliza temporários. Não há, porque as oportunidades simples foram aplicadas. A resposta correta é: Há, uma delas é na função geratemp que não reutiliza temporários. ← OK