You are on page 1of 3

Lista 2 preparatria para prova de compiladores V2

Questo 1) A fase de anlise semntica normalmente a ultima fase de anlise de um compilador e


tem a responsabilidade de realizar as validaes semnticas (contextuais). De forma anloga a fase
de gerao de cdigo a ltima fase de sntese. Nesse contexto, implementar em pseudocdigo a
lgica de analisar e a lgica de gerar de um n do tipo NodeFor com a regra a seguir (para a
linguagem SPP Script de Pascal em Portugus):
<For> ::=

'para' '(' <Atrib> ';' <Exp_Rel> ';' <Atrib> ')' '{' <List_Coman> '}'

Obs1.: um exemplo de comando estilo For , no MLP, na definio acima poderia ser:
i : inteiro ;
para ( i = 0 ; i < 10 ; i = i + 1 ) {
escreve ( i ) ;
}

Obs2.: o pseudocdigo de analisar(Node no) e gerar(Node no) dos no terminais <List_Coman>,


<Atrib> e <Exp_Rel> podem ser considerados j implementados.
Questo 2) Crie a(s) regra(s) gramatical(is) para um comando FOR (estilo C) no estilo do SLI
(Script de List em Italiano) e implemente os mtodos de anlise semntica (analisar) e de
interpretao (interpretar) para o n do tipo No_For.
Questo 3) A fase de anlise semntica de um compilador (ou interpretador) tem a responsabilidade
de executar as validaes que as fases de anlise lxica e sinttica no so capazes de processar. No
fragmento de programa abaixo, escrito na linguagem SPP (Script de Pascal em Portugus), quais as
aes semnticas sero necessrias? Cite e comente todas as aes semnticas que sero
necessrias, em cada linha de cdigo (se tiver ao semntica), detalhadamente.
def teste () : inteiro {
a1, a2, b2 : inteiro ;
a1 = 0 ;
a2 = 0 ;
se ( a1 > a2) {
c1 = c2 + 43 ;
}
retorna c1 ;
}

Questo 4) Compiladores de linguagens de programao traduzem programas-fonte, em uma


linguagem de entrada, para programas-objeto, em uma linguagem de sada. Durante o processo de
traduo, o compilador deve verificar se as sentenas do programa-fonte esto sintaticamente

corretas. Esse processo de anlise sinttica pode ser realizado construindo-se uma rvore de anlise
segundo duas principais abordagens: top-down, quando a rvore investigada da raiz s folhas; ou
bottom-up, das folhas raiz. Acerca desse assunto, julgue os itens seguintes.
I) A anlise top-down adequada quando a linguagem de entrada definida por uma gramtica
recursiva esquerda.
II) Independentemente da abordagem adotada, top-down ou bottom-up, o analisador sinttico utiliza
informaes resultantes da anlise lxica.
III) Se os programas em uma linguagem podem ser analisados tanto em abordagem top-down como
em bottom-up, a gramtica dessa linguagem ambgua.
IV) A anlise bottom-up utiliza aes comumente conhecidas como deslocamentos e redues sobre
as sentenas do programa-fonte.
Esto certos apenas os itens
a) II, III e IV.
b) II e IV.
c) I, III e IV.
d) I e III.
e) I e II.
Questo 5) As fases de anlise de um compilador tradicional so: anlise lxica, anlise sinttica e
anlise semntica. Nesse contexto definir a funo de cada fase de anlise e exemplificar com
cdigo SPP (Script de Pascal em Portugus) pelo menos um tipo de erro que deve ser capturado por
cada analisador.
Questo 6) Uma das fases mais importantes de um compilador a fase de anlise sinttica onde se
tm algumas tcnicas como a anlise sinttica preditiva recursiva. Nesse contexto considere a as
regras da gramtica abaixo (o smbolo de start <Bl_Comando>) e implemente os procedimentos
(em linguagem algortmica) de um analisador sinttico recursivo preditivo (ASRP):
<Bl_Comando> -> 'inicio' <Lista_Co> 'fim'
<Lista_Co>

-> <Comando> ';' <Lista_Co> |

<Comando>

-> <Bl_Comando> | <Atribuicao>

<Atribuicao> -> id '=' <Operando>


<Operando>

-> id | num

Obs.: id e num so classes de terminais


Questo 7) A fase de anlise semntica normalmente a ultima fase de anlise de um compilador e
tem a responsabilidade de realizar as validaes semnticas (contextuais). De forma anloga a fase
de gerao de cdigo a ltima fase de sntese. Nesse contexto, implementar em pseudocdigo a
lgica de analisar e de gerar de um n do tipo NodeWhile com a regra a seguir (para a linguagem
SPP Script de Pascal em Portugus):
<While> ::= 'enquanto' '(' <Exp_Rel> ')' '{' <List_Coman> '}'

Obs2.: o pseudocdigo de analisar(Node no) e gerar(Node no) dos no terminais <List_Coman> e


<Exp_Rel> podem ser considerados j implementados.
Questo 8) Crie a(s) regra(s) gramatical(is) para um comando SWITCH-CASE (estilo C) no estilo
do SLI (Script de List em Italiano) e implemente os mtodos de anlise semntica (analisar), de
interpretao (interpretar) e de gerao de cdigo (gerar) para o n do tipo No_For.
Questo 9) Definir a gramatica do SS-SQL (Super Simple SQL) onde um arquivo SS-SQL pode
conter 0 (zero) ou mais comandos SS-SQL, cada um separado por um ';' (ponto e vrgula). Cada
comando SS-SQL pode ser (em qualquer ordem):

criar uma entidade (com chave primaria e chave estrangeira);

deletar uma entidade;

inserir registro;

atualizar registro;

deletar registro;

selecionar registros (com clausula WHERE e ORDER BY pelo menos).

You might also like