You are on page 1of 6

Universidade Federal de Itajub a

ECO019 Compiladores

Engenharia da Computao ca Prof. MSc. Walter Aoiama Nagai

1a. Lista de Exerc cios 1. Que tipo de software um compilador? Descreva sucintamente um compilador. e 2. O que a linguagem fonte de um compilador? e 3. O que a linguagem alvo de um compilador? e 4. O que a Tabela de S e mbolos de um compilador? 5. Para que serve o relatrio de erros de um compilador? o 6. Indique e exemplique duas atividades adicionais de um compilador. 7. Faa um diagrama exemplicando o funcionamento de um compilador. Considere que c este compilador tenha mecanismos de tratamento de erros e de tabela de s mbolos. 8. Com respeito as fases de um compilador, indique as fases responsveis pelas seguintes a tarefas: (a) Converso numrica. a e (b) Grupo de caracteres que indicam uma palavra reservada. (c) A estrutura do comando IF. (d) A estrutura geral do seu programa em Pascal. (e) Quando ocorre a atribuio de variveis de tipos iguais ou diferentes. ca a (f) Para o caso de uma atribuio igual a: a:=((a*b)+c)+(a*b)+c; e d:=(a*b)+c; ca (g) Cdigo em assembly o (h) Cdigo em assembler o (i) Programa executvel a (j) Quando emitido uma mensagem de erro de sintaxe do programa e (k) Quando uma varivel no existe a a 9. Qual a funao da anlise lxica no compilador? c a e 10. Qual a funao da anlise sinttica no compilador? c a a 11. Qual a funao da anlise semntica no compilador? c a a 12. A fase de geraao de cdigo intermedirio realmente necessria para o compilador? c o a e a Justique. 13. E quanto a fase de geraao de cdigo objeto? Justique. c o 14. O que consiste um alfabeto de uma linguagem? E do que consiste uma cadeia/palavra de uma linguagem? 15. O que o comprimento de uma palavra? e 16. Descreva sucintamente o que uma linguagem. e 1

17. Descreva sucintamente as diferenas primrias entre: c a (a) um ponteiro e um vetor na linguagem C; (b) a passagem de parmetros em funes e macros na linguagem C; a co (c) um inteiro em C e um inteiro em Java; (d) passagem de tipos primitivos e tipos referenciados para funoes em Java; c (e) alocao de pilha e heap. ca 18. Dena um autmato nito determin o stico para reconhecer cadeias binrias de compria mento igual a 3, ou seja, cadeias com V = {0, 1}. Esse autmato no deve reconhecer a o a cadeia 101. A partir do autmato denido, escreva as expresses regulares desse autmato. o o o 19. Dena um autmato nito determin o stico para reconhecer as palavras reservadas: PROGRAM, BEGIN, END, IF, THEN e ELSE. O autmato deve ser capaz de reconhecer as o palavras reservadas escritas tanto em minsculas quanto maisculas. u u 20. Construa autmatos nitos para reconhecer as seguintes cadeias, denindo tambm as o e suas respectivas tuplas AFD = (E, V, f, q0 , F): (a) as cadeias binrias 000, 001, 010 e 011; a (b) as palavras batata, banana, bandeja e banheira; (c) as cadeias binrias 0010, 0100, 0110, 1000, 1010, 1100 e 1110; a (d) identicadores que iniciam com $ e com o primeiro caracter alfanumrico, por exe emplo, $a1, $z15, entre outros; (e) constantes numricas com os seguintes formatos, 10, 10.34, 3.14e3, 3.14e 3. Esses e formatos podem ter no nal da cadeia os seguintes s mbolos: L (inteiro longo com sinal), U (inteiro sem sinal), F (nmero real/utuante) e I (inteiro com sinal), ou u seja, 10U, 10.34F, 314L. Observao: os s ca mbolos L, U e I no podem estar no nal a de uma constante numrica real, isto , 10.3U a constante no vlida. e e a e a 21. Dena as expresses regulares para reconhecer comentrios na linguagem Pascal. Um o a comentrio em Pascal uma seqncia de caracteres entre os delimitadores (* e *). a e ue 22. Crie o autmato nito determin o stico a partir das expresses regulares R, S e T: o R : aS S : (a|c)S|T T : b|d

23. Dena as expresses regulares para reconhecer as constantes numricas descritas na o e seguinte forma: (+| |)digitos(.digitos|)(E(+| |)digitos) na qual, digitos uma seqncia de d e ue gitos entre 0 a 9 e | signica alternativa ou escolha. 24. Considere a gramtica a S (L)|a L L,S|S (a) Quais so os s a mbolos terminais, no-terminais e o s a mbolo de in cio? 2

(b) Encontre as arvores de derivaao para as seguintes sentenas: c c i. (a, a) ii. (a, (a, a)) iii. (a, ((a, a), (a, a))) (c) Construa as derivaes mais ` esquerda para cada uma das sentenas em (b); co a c (d) Construa as derivaes mais ` direita para cada uma das sentenas em (b); co a c (e) Calcule o FIRST(S); (f) Execute as transformaoes em Gramticas Livres de Contexto, caso sejam necessrias; c a a (g) Que linguagem a gramtica gera? a 25. Considere a gramtica a S a S b S|b S a S| (a) Mostre que esta gramtica amb a e gua, construindo duas derivaes mais ` esquerda co a diferentes para a sentena abab. c (b) Construa as derivaes mais ` direita correspondentes a abab. co a (c) Construa as rvores gramaticais correspondentes para abab. a (d) Calcule o FIRST(S). (e) Execute as transformaes em Gramticas Livres de Contexto, caso sejam necessrias; co a a (f) Que linguagem a gramtica gera? a 26. Considere a gramtica a bexpr bexpr or btermo | btermo btermo btermo and bf ator | bf ator bf ator not bf ator | (bexpr) | true | false (a) Construa uma arvore gramatical para a sentena not (true or false) c (b) Calcule o FIRST de todos os no-terminais. a (c) Execute as transformaes em Gramticas Livres de Contexto, caso sejam necessrias; co a a (d) Esta gramtica amb a e gua? Justique. 27. Dada a gramtica G com as produoes: a c E EE|E/E|E+E|EE|(E)|E|num Considere que esta gramtica G seja amb a gua e responda as seguintes questes: o (a) Mostre uma cadeia que possua duas arvores de derivaao diferentes. c (b) Crie uma outra gramtica G que retire a ambigidade da G. Considere nesta nova a u gramtica que a precedncia dos operadores deve ser respeitada, ou seja, os opera e adores e / possuem maior prioridade, os operadores + e possuem a menor prioridade. Uma expresso entre parnteses ou uma expresso com o operador unrio a e a a so avaliadas antes de qualquer outra expresso com os outros operadores. a a (c) Execute as transformaes em Gramticas Livres de Contexto, caso sejam necessrias; co a a (d) Calcule o FIRST(G) e o FIRST(G). 3

28. Considere a gramtica G: a S if E then S|if E then S else S|id := E E E and E|E or E|not E|(E)|true|false Considerando a gramtica G amb a gua, responda as seguintes questes: o (a) Mostre uma cadeia que gere duas rvores de derivao diferentes. Essa cadeia deve a ca ter no m nimo dois if s. (b) Faa a derivaao mais a esquerda da cadeia que voc descreveu no item anterior. c c ` e (c) Idem para a derivaao mais a direita da cadeia. c ` (d) Retire a ambiguidade da gramtica G criando uma nova gramtica G, na qual, deve a a ser respeitada a condiao dos ifs aninhados. c (e) Calcule o FIRST(S). (f) Execute as transformaoes em Gramticas Livres de Contexto, caso sejam necessrias; c a a 29. Considere a gramtica: a DECL IDLIST : TYPE ; IDLIST IDLIST , id | id TYPE integer | real (a) Qual a linguagem que esta gramtica gera? a (b) Crie uma cadeia e sua respectiva arvore de derivao. Essa cadeia deve ter no m ca nimo 3 identicadores. (c) Faa a derivaao mais a esquerda da cadeia do item anterior. c c ` (d) Faa a derivaao mais a direita da mesma cadeia. c c ` (e) Calcule o FIRST de todos os no-terminais. a (f) Execute as transformaoes em Gramticas Livres de Contexto, caso sejam necessrias; c a a (g) Esta gramtica amb a e gua? D um exemplo se a gramtica for ou no for amb e a a gua. 30. Dada a gramtica G com as seguintes produoes: a c S begin L end | id := E L L;S|S E E ou E | id (a) Qual a linguagem que esta gramtica gera? a (b) Crie uma cadeia e sua respectiva arvore de derivaao. Essa cadeia deve ter uma c arvore de derivaao com pelo 4 n c veis. (c) Faa a derivaao mais a esquerda da cadeia do item anterior. c c ` (d) Faa a derivaao mais a direita da mesma cadeia. c c ` (e) Calcule o FIRST de todos os no-terminais. a (f) Execute as transformaoes em Gramticas Livres de Contexto, caso sejam necessrias; c a a (g) Esta gramtica amb a e gua? D um exemplo se a gramtica for ou no for amb e a a gua.

31. Considere a gramtica: a comando condicional iterativo atribuicao expr termo f ator condicional | iterativo | atribuicao if expr then comando repeat lista until expr | while expr do comando id := expr expr + termo | expr termo | termo termo f ator | termo / f ator | f ator num | id | expr | (expr)

(a) Qual a linguagem que esta gramtica gera? a (b) Crie uma cadeia e sua respectiva rvore de derivao. a ca (c) Faa a derivaao mais a esquerda da cadeia do item anterior. c c ` (d) Faa a derivaao mais a direita da mesma cadeia. c c ` (e) Calcule o FIRST de todos os no-terminais. a (f) Execute as transformaoes em Gramticas Livres de Contexto, caso sejam necessrias; c a a (g) Esta gramtica amb a e gua? D um exemplo se a gramtica for ou no for amb e a a gua. 32. Construa uma gramtica para reconhecer a seguinte sentena: a c programa X; var a, b, temp : inteiro; inicio se a < b entao temp := b senao temp := a; if temp = b then b := a fim. A sua gramtica no deve ser amb a a gua. Alm disso, aplique, se necessrio, as transe a formaoes de Gramticas Livres de Contexto na sua gramtica. Para comprovar se a c a a gramtica est correta, faa a derivao mais ` esquerda da sua gramtica. a a c ca a a 33. Considere a gramtica abaixo: a ListDecl ListDecl ; Decl | Decl Decl ListID : T ipo ListID ListID , id | id T ipo Escalar | array [ Dimens ] of T ipo Escalar id | ( ListID ) | int |real Dimens Limite .. Limite Limite int | id Faa a ASD Recursiva Preditiva para a gramtica. c a 34. Para resolver os itens da questo necessaria a deniao da gramtica de uma linguagem a e c a denominada de P. A linguagem P uma variaao (m e c nima) da linguagem Pascal, traduzida para a l ngua portuguesa. A gramtica da linguagem P encontra-se denida a seguir. a 5

<programa> <bloco> <decl variaveis> <variaveis> <lista ids> <tipo> <comando composto> <comando>

::= ::= ::= ::= ::= ::= ::= ::=

<atribuicao> <comando condicional> <comando repetitivo> <comando leitura> <comando impressao> <expressao> <relacao> <expressao simples> <termo> <fator>

::= ::= ::= ::= ::= ::= ::= ::= ::= ::=

<identicador> <numero> <digito> <letra>

::= ::= ::= ::=

programa <identicador>; <bloco>. [<decl variaveis>] <comando composto> var <variaveis> {; <variaveis>} <lista ids> : <tipo> <identicador> {, <identicador>} <identicador> inicio <comando> {; <comando>} m <atribuicao> | <comando condicional> | <comando repetitivo> | <comando leitura> | <comando impressao> | <comando composto> <identicador> := <expressao> se <expressao> entao <comando> [senao <comando>] enquanto <expressao> faca <comando> le(<lista ids>) imprime(<expressao> {, <expressao>}) <expressao simples> [<relacao> <expressao simples>] = | < > | < | <= | > | >= [+|] <termo> {(+||ou) <termo>} <fator> {(*|/|e) <fator>} <identicador> | <numero> | (<expressao>) | nao <fator> <letra> {<letra> | <digito>} <digito> {<digito>} 0|1|2|3|4|5|6|7|8|9 a|b|c| . . . |z|A|B| . . . |Z

Os no-terminais esto representados entre os s a a mbolos < e >, enquanto os s mbolos terminais esto representados em negrito. Os s a mbolos (terminais e no-terminais) que a esto entre as chaves podem ser repetidos 0 ou mais vezes. Os s a mbolos entre colchetes podem ser escolhidos 0 ou 1 vez e os s mbolos entre parnteses podem ser selecionadas e um de cada vez. (a) Calcule o conjunto FIRST para a gramtica da linguagem P. a (b) Faa um programa para ler duas variveis A e B e calcular a varivel C com a c a a seguinte expresso (A + B) * B. Seu programa tambm deve imprimir os valores de a e A, B e C. (c) Faa um programa para imprimir o menor valor de 3 variveis A, B e C. O seu c a programa deve ler os valores das variveis. a (d) Faa um programa para ordenar os valores de 3 variveis A, B e C. O seu programa c a deve ler os valores das variveis e imprimir os valores em ordem crescente. a (e) Faa um programa para calcular o fatorial de um nmero N. O seu programa deve c u imprimir o valor e N e o resultado de N!.