Você está na página 1de 3

REVISAO ( com perguntas e respostas para estudo )

Bibliografia para estudo:


Materiais da sala virtual
Livro do Aho ( Compiladores principios, tecnicas e ferramentas, capitulos 1,2 e 3 )
1) Na compilacao, a anlise consiste em tres fase. Explique como este processo se
desenvolver na compilacao:
Resp.: A primeira fase da compilacao normalmente a analise lexica, tb conhecida co
linear, na qual um fluxo de caracteres contituindo um programa lido da esquerda para
a direita e agrupados em tokens.
Na segunda fase, analise sintatica ou hierarquica, o tokens so agrupados
hierarquicamente em colecoes anhinhadas com significado coletivo.
Na terceira e ultima fase da analise da compilacao ocorrem as verificacoes no sentido de
assegurar que os componentes de um programa se combinam de forma significativa.
Podemos interpretar a resposta acima tambem desta forma:
1 fase analise lexica : identifica os tokes
2 fase analise sintatica: analisa as frase ou gramatica da linguagem
3 fase analise semantica : analise o contexto, um visao mais ampla de abrangente dos
comandos e definicoes
2) H diferenca entre analise lexica e analise sintatica ?
Resp: esta divisao entre analise lexica e sintatica arbitraria.
O determina esta separacao a recursividade da linguagem fonte.
As contrucoes lexicas no requerem recursao, enquanto a sintaticas frequentemente a
exigem.
As gramaticas livres de contexto so uma formalizacao das regras recursivas que
podem ser usadas para guiar a analise sintatica

3) A analise de tipo, seja de uma variavel ou de uma constante, em uma expresao


normalmente efetuada em qual fase do compilador ? Explique.
Resp: Na fase semantica captura se as informacoes de tipo paa a fase subsequente de
geracao de codigo.
Utlizamos a estrutura hierarquica determinada na fase sintatica, a fim de identificar os
operadores e operandos das expressoes e enunciados, ou seja temos a necessidade de
uma visao de contexto para esta analise, funcao de responsabilidade da analise
semantica.
4) Tabela de simbolos normalmente utilizada em varias fase do compilador. Fale
um pouco a mesma.
Resp.: a tabela de simbolos um estrutura de dados contendo um registro para cada
identificador, com os campos contendo os atributos do identificador. A estrutura de
dados permite, rapidamente, encontrar cada registro, armazenar e/ou recuperar dados
do mesmo.
O analisador lexico insere os dados na tabela de simbolos, no entanto, os atributos do
identificador no podem ser normalmente determinados durante esta fase(analise
lexica). As fase seguintes iram colocar mais informacoes sobre os identificadores na
tabela de simbolos e em seguida as usam de varias maneiras, por exemplo a analise
semantica na fase de analise das expressoes(operandos e operadores).

5) Um compilador no tem por entrada apenas programas fontes mas tambem


entradas produzidas por pr-processadores. Fale sobre a funcao dos prprocessadores.
Resp.: os pre-processadores produzem entradas para os compiladores e podem realizar
as seguintes funcoes:
a) processamento de macros
b) incluso de arquivos
c) pre-processadores racionais
d) extensores de linguagens

6) Escrever um compilador completo nos dias de hoje pode parecer um trabalho


arduo e quase como querer criar a roda, mas no precisa ser assim. Como
poderiamos criar um compilador de uma forma mais agil ?
Resp: Sim como muitas linguagem j foram criadas ate hoje desde o primeiro
compilador Fortran, foram criadas ferramentas de software para ajudar neste processo,
tais como:
a) geradores de analisadores gramaticais
b) geradores de analisadores lexicos
c) dispositivos de traducao dirigida pela sintaxe
d) geradores automaticos de codigo
e) dispositivos de fluxo de dados

7) Um programa pode conter varios tipos de erros, no planejamento do tratamento


dos tipos de erros para melhorar a resposta do compilados identifique os nveis
de erros.
Resp.: Os erros pode ser:
Lexicos, tais como errar a grafia de um identificador, palavra-chave ou operador;
Sintaticos, tais como uma expressao aritmetica com parenteses no-balanceados;
Semanticos, tais como um operador aplicado a um operador incompativel

8) Identifique os erros na listagem abaixo e aponte o nivel de cada um.


(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)

program pmax (input, output ) ;


var
x, y: char;
Function max (i: integer; j: integer) : integer;
{ return maximum of integers i and j }
begin
if i > j them max := i;
else max = j
end;
begin
readln (x, y);
writeln (max (x,y))
end.

Resp:
(1)
(2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
(10)
(11)
(12)
(13)

program pmax (input, output ) ;


var
x, y: char;
Function max (i: integer; j: integer) : integer;
{ return maximum of integers i and j }
begin
if i > j them max := i;
else max = j;
end;
begin
readln (x, y);
writeln (max (x,y))
end.

Linha (7) erro lexico THEM o correto then


Linha (7) erro sintatico no pode ter ponto-e-virgula pois h else depois
Linha (8) erro sintatico na atribuicao faltou dois-ponto (:=)
Linha (12) erro semantico passagem de parametro de tipo incompativel