·

Ciência da Computação ·

Compiladores

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Atividades Parte 1 1 considere a seguinte gramática stmt if expr then stmt else stmt if expr then stmt other Considere a simplificação desta gramática da seguinte forma if expr then substituído por i else substituído por e other substituído por a stmt substituído por S tendo a gramática simplificada S i S e S i S a a Com base nesta gramática construa o autômato LR0 Note que não é possível construir a tabela SLR1 pois a gramática é ambígua resultando em entradas multidefinidas nesta tabela Resolva as entradas multidefinidas na tabela considerando que um else e está associado ao último if i Em todo conflito resolvido explique logicamente a decisão usada b Com base na tabela SLR1 do item a preencha as células em branco desta tabela situações com ações apropriadas de recuperação de erro além da reportagem do erro que acontece em cada situação Questão 2 Mostre que a gramática a seguir é LALR1 mas não SLR1 S A a b A c d c d b a A d Questão 3 Explique o processo de tradução de uma função com n argumentos e sua chamada para o Código de Três Endereços Ilustre o código de três para uma função com n 2 parâmetros com retorno Ilustre também o como é feita a chamada da função com o código de três endereços Atividades Parte 2 1 A identificação e o tratamento de erros em programas de computador estão entre as tarefas dos compiladores Os erros de um programa podem ter variados tipos e precisam ser identificados e tratados em diferentes fases da compilação Considere uma linguagem de programação que exige que as variáveis manipuladas por seus programas sejam previamente declaradas não podendo haver duplicidade de identificadores para variáveis em um mesmo escopo Considere ainda que a sintaxe dessa linguagem tenha sido definida por meio de uma gramática livre de contexto e as produções seguintes definam a forma das declarações de variáveis em seus programas D TL TL D T int real char L id idL Considere os exemplos de sentenças I e II a seguir com a indicação entre os delimitadores e de diferentes tipos de erros I int a b dois pontos após a palavra int II int ab real a declaração dupla da variável a A partir dessas informações assinale a opção correta A A identificação e a comunicação do erro em qualquer uma das sentenças são funções do analisador léxico B O compilador não tem meios para identificar e relatar erros como o da sentença I C A identificação e a comunicação do erro na sentença I são funções da geração de código intermediário D A identificação e a comunicação do erro na sentença II são funções do analisador léxico E A identificação e a comunicação do erro na sentença II são funções da análise semântica 2 É comum que linguagens de programação permitam a descrição textual de constantes em hexadecimal além de descrições na base dez O compilador para uma linguagem que suporte constantes inteiras em hexadecimal precisa diferenciar inteiros em base dez dos números hexadecimais que não usam os dígitos de A a F Por exemplo a sequência de caracteres 12 pode ser interpretada como doze em base dez ou como dezoito em hexadecimal Uma maneira de resolver esse problema é exigindo que as constantes em hexadecimal terminem com o caractere x Assim não há ambiguidade por exemplo no tratamento das sequências 12 e 12x A gramática a seguir descreve números inteiros possivelmente com o símbolo x após os dígitos Os não terminais são M N E e os terminais são x e d em que d representa um dígito M E M N E Nx N Nd N d Durante a construção de um autômato LR para essa gramática os seguintes estados são definidos q0 M M M E M N E Nx N Nd N d e1e0 N M N M N x M N d A respeito dessa gramática analise as seguintes asserções e a relação proposta entre elas A gramática descrita é do tipo LR0 PORQUE É possível construir um autômato LR0 determinístico cujos estados incluem e0 e e1 acima descritos Acerca dessas asserções assinale a opção correta A As duas asserções são proposições verdadeiras e a segunda é uma justificativa correta da primeira B As duas asserções são proposições verdadeiras mas a segunda não é uma justificativa correta da primeira C A primeira asserção é uma proposição verdadeira e a segunda uma proposição falsa D A primeira asserção é uma proposição falsa e a segunda uma proposição verdadeira E Tanto a primeira quanto a segunda asserções são proposições falsas 3 Em um compilador um analisador sintático descendente preditivo pode ser implementado com o auxílio de uma tabela construída a partir de uma gramática livre de contexto Essa tabela chamada tabela LLk indica a regra de produção a ser aplicada olhandose o késimo próximo símbolo lido chamado lookahead k Por motivo de eficiência normalmente buscase utilizar k 1 Considere a gramática livre de contexto G X Y Z a b c d e P X em que P é composto pelas seguintes regras de produção X aZbXY c Y dX ε Z e Considere ainda a seguinte tabela LL1 construída a partir da gramática G sendo o símbolo que representa o fim da cadeia Essa tabela possui duas produções distintas na célula Y d gerando no analisador sintático uma dúvida na escolha da regra de produção aplicada em determinados momentos da análise a b c d e X XaZbXY Xc Y YdX Yε Yε Z Ze Considerando que o processo de construção dessa tabela LL1 a partir da gramática G foi seguido corretamente a existência de duas regras de produção distintas na célula Y d neste caso específico resulta A da ausência do símbolo de fim de cadeia nas regras de produção B de um nãodeterminismo causado por uma ambiguidade na gramática C do uso incorreto do símbolo de cadeia vazia ε nas regras de produção D da presença de duas regras de produção com um único terminal no corpo E da presença de duas regras de produção com o mesmo não terminal na cabeça