Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


AB2 COMPILADORES UFAL, Provas de Compiladores

Segunda prova de compiladores 2018.1 Universidade Federal de Alagoas

Tipologia: Provas

2021

Compartilhado em 23/07/2021

thiago-rodrigues-ti7
thiago-rodrigues-ti7 🇧🇷

1 documento

1 / 5

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1) (0.4) (PosComp 2010) Considere o trecho de código C a seguir:
int main() {
int i;
float f;
int v[10]
i 3;
v[f] = 45;
while {
}
}
Quantos erros semânticos o código possui?
a) 1
b) 2
c) 3
d) 4
e) 5
pf3
pf4
pf5

Pré-visualização parcial do texto

Baixe AB2 COMPILADORES UFAL e outras Provas em PDF para Compiladores, somente na Docsity!

  1. (0.4) (PosComp 2010) Considere o trecho de código C a seguir: int main() { int i; float f; int v[10]

i 3; v[f] = 45; while { } } Quantos erros semânticos o código possui? a) 1 b) 2 c) 3 d) 4 e) 5

  1. (0.4) (PosComp 2016) Sobre a técnica de tradução dirigida por sintaxe, é correto afirmar que: a) Uma definição dirigida por sintaxe é uma gramática livre de contexto acrescida de atributos e regras. Os atributos são associados às produções, e as regras aos símbolos terminais e não terminais da gramática. b) Uma definição dirigida por sintaxe é denominada definição S-atribuído quando nessa estão envolvidos apenas atribuídos herdados. c) As regras semânticas só são aplicadas após a construção total da árvore sintática pelo parser do compilador. d) Grafos de dependência são utilizados para determinar uma ordem de avaliação para as instâncias dos atributos de uma árvore de derivação. TRUE e) Sendo "S" um símbolo da gramática presente em uma árvore de derivação, um atributo sintetizado é computado através dos valores dos atributos dos nós irmãos ou do nó pai de "S".

  2. (1.0) Definir as ações semânticas para inserir na gramática o comando:

S = "faça" LS "enquanto" Eb "fim"

S = “faça” LS “enquanto” Eb “fim” { NTBool Eb(geraRot(), S.prox); NTSent LS(geraRot()); S.cod = emiteRot(Eb.true) + LS.cod + emiteRot(LS.prox) + Eb.cod; }

  1. (2.2) Definir as ações semânticas para inserir na gramática o comando:

S = "para" Atr "até" Ea1 Passo "faça" LS "fim" Passo = "passo" Ea2 | épsilon

Considerando que o laço é pré-teste, que as expressões de controle são pré-avaliadas e que caso "passo" seja omitido deve ser assumido 1. Embora desnecessários os números em Ea1 e Ea2 devem ser mantidos para evitar confusão sobre a qual Ea a solução do aluno se refere. S = “para” Atr “até” Ea1 Passo “faça” LS “fim” { string aval = geraRot(); NTSent LS(geraRot()); NTerm Atr, Ea1, Passo;

else if (prev == tkCat.Enquanto) { NTBool Eb(geraRot(), S.prox); funEb(Eb); tk = tk.next(); NTSent LS(geraRot()); funLS(LS); tk = tk.next(); S.cod = emiteRot(LS.prox) + Eb.cod + emiteRot(Eb.verd) + LS.cod + geraGT(LS.prox); } else { NTerm Atr; funAtr(Atr); S.cod = Atr.cod; } }

  1. Adicionar às ações semânticas existentes … Sei lá o que… Para poder fazer tratamento de tipo. (Fiz o que pude kkk :) ) Caso necessário, use: inline string t2s(eTipo t) { static const string s[] = {“int”, “int”, “real”}; return s[t]; } a) (0.8) Eb = Eb ‘ou’ Tb b) (1.6) Er = Ea1 ‘opi’ Ea c) (0.4) Fb = “falso” d) (0.8) Fa = “id”

e) (0.4) Fa = “cteR”