You are on page 1of 11

Teste I – Compiladores

Variante 1 – Correção
2017

UNIVERSIDADE ZAMBEZE
FACULDADE DE CIÊNCIAS E TECNOLOGIA
CURSO: ENGENHARIA INFORMATICA
3oANO – 1oSEMESTRE DATA: 05-04-2017 DURAÇÃO: 100 MINUTOS
TESTE I DE COMPILADORES

1. Desenhar o automato representado pelo seguinte conjunto de regras: (3 valores)


SaS SbS ScA AdB AeB AfC
BgD DhC CiE CjF EjF FØ
a) Escrever a expressao regular correspondente ao automato obtido.
R:/

a) (a|b)*c(f|(d|e)gh)(ij|j)

2. Os seguintes conjuntos de regras de producção pertencem a diferentes gramáticas.


Classificar as gramáticas em: Não Linear e Linear, se existir alguma gramática que seja linear
dizer se é Linear à Direita ou Linear à Esquerda. (2 valores)
I. SaSb II. SAc III. SABS
ScA SBa SaC
ABb AAb ABd
AcB ABc BcC
Be Bf CdCe
Ce
a) Qual ou quais das grámaticas é regular?
R:/
A gramática I é linear, a gramática II é linear à esquerda e a gramática III é não linear.
a) A gramatica regular é a gramática II.

3. Completar a seguinte tabela, que tem a ver com as diferentes etapas do processo de
compilação. (5 valores)
Geração de
Análise Geração de
Etapa Análise Semántica código Análise Léxica
Sintáctica código objecto
intermedio
Etapa onde vai Etapa que tem É feita uma análise da Etapa que tem Etapa que
se determinar como resultado estrutura construida ao como resultado determina se
se o código o codigo longo das etapas um código que existem no codigo
fonte cumpre executavel que anteriores e tenta vai ser utilizado fonte alguns
Descrição com as regras é o resultado encontrar erros que tem para a caracteres que não
que descrebe do processo de a ver com o significado construção do estejan inclusos no
a estrutura da compilação. das regras que código alfabeto da
linguagem. determinam a estrutura executavel. linguagem.
da linguagem.
Teste I – Compiladores
Variante 1 – Correção
2017

4. Assinale verdadeiro (V) ou falso (F) segundo corresponda. (3 valores)


a) _V_ Uma linguagem é um conjunto de símbolos y regras que permitem a comunicação,
quer dizer, que permitem trasmitir uma idea, uma mensajem.
b) _F_ Token é uma estrutura onde se armazenam as variaveis e constantes utilizadas no
programa fonte.
c) _F_ O trabalho dum compilador consiste em pegar uma cadena fonte do programa,
determinar se é valida sintacticamente e gerar um programa fonte equivalente.

5. Diga quais são as expressões do programa fonte, que definem os seguintes grupos de
tokens. Faça uso da tabela de símbolos que se especifica. (4 valores)

R:/
public static void teste(){
int atributo;
String nada;
return;
}

6. Seja a seguinte gramática linear a direita transforma-la numa gramática linear a esquerda.
Expor os passos utilizados para a conversão. (3 valores)
G=({S, A}, {a, b, c}, S, {SaS, ScA, AbA, AbE})
R:/

Ao inverter o autómato fica:

Logo as regras vao ser as seguintes: EbA, AbA, AcS, Ac, SaS, Sa
Invertemos a ordem da parte direita das regras e obtemos:
G’=({S, A, E}, {a, b, c}, S, {EAb, AAb, ASc, Ac, SSa, Sa} )
Teste I – Compiladores
Variante 1 – Correção
2017
Teste I – Compiladores
Variante 2 – Correção
2016

UNIVERSIDADE ZAMBEZE
FACULDADE DE CIÊNCIAS E TECNOLOGIA
CURSO: ENGENHARIA INFORMATICA
3oANO – 1oSEMESTRE DATA: 05-04-2017 DURAÇÃO: 100 MINUTOS
TESTE I DE COMPILADORES

1. Os seguintes conjuntos de regras de producção pertencem a diferentes gramáticas.


Classificar as gramáticas em: Não Linear e Linear, se existir alguma gramática que seja linear
dizer se é Linear à Direita ou Linear à Esquerda. (2 valores)
I. SaSb II. SAc III. SaS
ScA SBa SbS
ABb AAb ScA
AcB ABc AbB
Be Bf Bc
a) Qual ou quais das grámaticas é regular?
R:/
A gramática I é linear, a gramática II é linear à esquerda e a gramática III é linear à direita.
a) As gramaticas regulares são as gramáticas II e III.

2. Diga quais são as expressões do programa fonte, que definem os seguintes grupos de
tokens. Faça uso da tabela de símbolos que se especifica. (4 valores)

R:/
public void cria_objecto(char param_2, float param_1){
return new teste();
}
Teste I – Compiladores
Variante 2 – Correção
2016

3. Diga qual ou quais das palavras podem ser reconhecidas pelo seguinte autômato. (2 valores)

I ) aaabca
II ) bbca
III ) caababbc
IV) bbccaabbcca

R:/
As palavras reconhecidas pelo autômato são: I, II e IV.

4. Completar o autômato e a tabela de transições associada, segundo corresponda. (3 valores)

a b
1 2 4
2 3 5
3 3 3
4 3 5
5 5 5

5. Obter o autómato finito associado à expressão regular (00+(1+01)(11+0)*10)* utilizando o


algoritmo estudado na sala. Escrever todos os passos do processo. (3 valores)
R:/

0 0+

1 1+

X*

Tendo estas estruturas já é possível construir o autómato da expressão regular. O autómato em


questão é o seguinte:
Teste I – Compiladores
Variante 2 – Correção
2016

Poderiamos reduzir mais um pouco este autómato e no fim iamos obter:

6. Seja a seguinte gramática linear a direita transforma-la numa gramática linear a esquerda.
Expor os passos utilizados para a conversão. (3 valores)
R:/

7. Escrever o autómato e a gramatica correspondente para a linguagem cujas palavras


começam com a, b ou c, depois contem dois b, a seguir pode conter quaisquer combinação
de a e c.e terminam com uma combinação de b e c, como máximo (3 valores)
R:/
Teste I – Compiladores
Variante 3 – Correção
2017

UNIVERSIDADE ZAMBEZE
FACULDADE DE CIÊNCIAS E TECNOLOGIA
CURSO: ENGENHARIA INFORMATICA
3oANO – 1oSEMESTRE DATA: 05-04-2017 DURAÇÃO: 100 MINUTOS
TESTE I DE COMPILADORES

1. Seja a seguinte especificação de linguagem: as expressões matemáticas simples que contem


atribuição (=), soma (+), resta (-), multiplicação (*) e divisão (/) de identificadores ou
variáveis e constantes numéricas. (5 valores)
a) Escreva o autómato associado.
b) Escreva a expressão regular associado ao autómato da linha anterior utilizando o
algoritmo estudado na sala. Mostrar todos os passos do processo.
c) Escrever uma Gramatica Linear a Direita para a especificação de linguagem que foi dada.

2. Converter a gramatica da pergunta anterior a uma Gramatica Linear a Esquerda utilizando o


algoritmo estudado na sala. Mostrar todos os passos do processo. (2 valores)

3. Apresente o esquema básico da estrutura dos compiladores especificando a informação que


é trocada entre as diferentes etapas do processo. (3 valores)

4. Assinale verdadeiro (V) ou falso (F) segundo corresponda. (3 valores)


a) _F_ Token é a estrutura que armazena variáveis e constantes utilizadas no programa
fonte.
b) _V_ Uma linguagem é um conjunto de símbolos y regras que permitem a comunicação,
quer dizer, que permitem transmitir uma ideia, uma mensagem.
c) _F_ O trabalho dum compilador consiste em pegar uma cadena fonte do programa,
determinar se é valida sintácticamente e gerar um programa fonte equivalente.

5. Escrever o conjunto de regras de produção gerados pelo autômato seguinte: (3 valores)

R:/
SaS SbS ScA AdB AeB AfC
BgD DhC CiE CjF EjF FØ
Nota: O resultado tambem pode ser uma gramática linear à esquerda ou qualquer outra gramática,
sempre que seja equivalente à aquela apresentada acima.

6. Diga quais são as expressões do programa fonte, que definem os seguintes grupos de
tokens. Faça uso da tabela de símbolos que se especifica. (4 valores)
Teste I – Compiladores
Variante 3 – Correção
2017

R:/
public static void teste(){
int atributo;
String nada;
return;
}
Teste I – Compiladores
Variante 4 – Correção
2017

UNIVERSIDADE ZAMBEZE
FACULDADE DE CIÊNCIAS E TECNOLOGIA
CURSO: ENGENHARIA INFORMATICA
3oANO – 1oSEMESTRE DATA: 05-04-2017 DURAÇÃO: 100 MINUTOS
TESTE I DE COMPILADORES

1. Determinar se os seguintes autómatos são equivalentes. Justificar a sua resposta. (4 valores)

R:/
Não são equivalentes pois os autómatos não reconhecem a mesma linguagem.
A linguagem reconhecida pelo automato da esquerda corresponde à linguagem cujas palavras
terminam com b ou d.
O autómato da direita representa o conjunto de palavras que terminam com b, d ou e.
Logo as linguagens por eles reconhecidas reconhecidas não são iguais

2. Completar o autômato e a tabela de transições associada, segundo corresponda. (3 valores)

a b
1 2 4
2 3 5
3 3 3
4 3 5
5 5 5
Teste I – Compiladores
Variante 4 – Correção
2017

3. Diga quais são as expressões do programa fonte, que definem os seguintes grupos de
tokens. Faça uso da tabela de símbolos que se especifica. (4 valores)

R:/
public void cria_objecto(char param_2, float param_1){
return new teste();
}

4. Seja a seguinte especificação de linguagem: as expressões matemáticas simples que contem


atribuição (=), soma (+), resta (-), multiplicação (*) e divisão (/) de identificadores ou
variáveis e constantes numéricas. (5 valores)
a) Escreva o autómato associado.
b) Escreva a expressão regular associado ao autómato da linha anterior utilizando o
algoritmo estudado na sala. Mostrar todos os passos do processo.
c) Escrever uma Gramatica Linear a Direita para a especificação de linguagem que foi dada.
R:/
a)

b) id=(id|num) ((+|-|*|/)(id|num))*
c) G=({S, E, F}, {id, num, =, +, -, *, /}, S, {Sid=E, EidF|numF, F+E|-E|*E|/E|ø})

5. Converter a gramatica da pergunta anterior a uma Gramatica Linear a Esquerda utilizando o


algoritmo estudado na sala. Mostrar todos os passos do processo. (2 valores)
R:/

inverter o sentido das transiçoes o autómato que se obtem é

o seguinte:
Escrevemos as regras representadas no autómato:
FidE|numE, E+F|-F|*F|/F|id=S, Sø
A seguir escrevemos os nao terminais do lado esquerdo das regras:
FEid|Enum, EF+|F-|F*|F/|Sid=, Sø
Teste I – Compiladores
Variante 4 – Correção
2017

Logo a gramatica linear a esquerda é a seguinte:


G=({S, E, F}, {id, num, =, +, -, *, /}, F, { FEid|Enum, EF+|F-|F*|F/|Sid=, Sø})

6. Diga qual ou quais das palavras podem ser reconhecidas pelo seguinte autômato. (2 valores)

I ) aaabcaaab
II ) babcacbcab
III ) caababbc
IV) bbccaabbcca

R:/
As palavras reconhecidas pelo autômato são: I, II e IV.

You might also like