Exercícios de LFA
Estes exercícios destinam-se a ser feitos pelos alunos fora das
aulas. As soluções propostas poderão ser entregues ao docente para
correcção ou poderão ser discutidas no horário de atendimento. Estão
disponíveis possíveis resoluções para os exercícios assinalados com
(s).
NB: Estes enunciados deverão ser lidos num ambiente que
mostre a letra lambda (λ), assim como índices superiores e
inferiores.
Agradeço que qualquer dificuldade em os visualizar me seja comunicada.
-
Construa definições recursivas dos seguintes conjuntos, onde
Σ = {a,b} é um alfabeto.
-
C1 = { palavras sobre Σ em que o símbolo a
ocorre aos pares }.
(C1 inclui, por exemplo, bbaab e
aaaa, mas não inclui aaa ou
aabaaaba.)
-
C2 = { w | w ∈ Σ*, |w| é par, w
começa por a e, em w, os
a's e os b's ocorrem
alternados }.
-
C3 = { w | w ∈ Σ* e w é capicua }.
- (s)
C4 = { anbn | n > 0 }.
(Nota: ak representa k
ocorrências consecutivas do símbolo a).
-
C5 = { aibj | 0 ≤ i < j }.
- (s)
C6 = { w | w ∈ Σ* e o número de
a's em w é igual ao de b's }.
(Sugestão: use a concatenação de palavras no passo recursivo.)
-
Liste todas as subpalavras, todos os prefixos e todos os sufixos
das seguintes palavras sobre o alfabeto {0,1,2,3}:
- 01023;
- 11111;
- λ.
-
Dê exemplos de palavras que pertencem e que não pertencem a cada
um dos seguintes conjuntos, onde T = {a,b}:
-
L1 = { w | existe u pertencente a TT tal que
w=uuRu };
-
L2 = { w | w ∈ T* e ww=www };
-
L3 = { w | existem u e v pertencentes a T*
tais que uvw=wvu }.
-
Para cada um dos conjuntos da pergunta anterior, diga,
justificando, se é ou não regular.
-
Construa uma expressão regular que represente os números
reais sem sinal escritos de acordo com as seguintes regras:
-
um número real tem sempre uma vírgula;
-
um número real começa por 0 se e só se a sua parte inteira é 0;
-
um número real acaba em 0 se e só se a sua parte decimal é 0.
-
Construa expressões regulares que representem as linguagens indicadas.
- (s)
A linguagem das palavras sobre {a,b,c} em que todos os
a's precedem todos os b's que, por sua vez,
precedem todos os c's (donde que todos os a's
precedem todos os c's), podendo não haver nem
a's, nem b's, nem c's.
- (s)
A linguagem da alínea anterior sem a palavra vazia.
-
As palavras sobre {a,b,c} de comprimento inferior a 3.
-
As palavras sobre {a,b,c} que começam por a, acabam em
cc e têm exactamente dois b's.
-
A linguagem das palavras sobre {a,b} que têm aa e bb
como subpalavras.
-
As palavras sobre {a,b} de que bba não é subpalavra.
- (s)
A linguagem das palavras sobre {a,b} que não têm prefixo aaa.
- (s)
A linguagem das palavras sobre {a,b} que não têm aaa como
subpalavra.
-
As palavras sobre {x,y} em que xy não ocorre.
-
As palavras sobre {x,y} em que xy ocorre.
-
As palavras sobre {x,y} em que xy só ocorre uma vez.
-
Descreva, informalmente, as linguagens representadas pelas
expressões regulares seguintes:
- (a ∪ b ∪ c)(a ∪ b ∪ c)*;
- (a ∪ b)((a ∪ b)(b ∪ a))*;
- 5 ∪ (1 ∪ 2 ∪ ... ∪ 9)(0 ∪ 1 ∪ ... ∪ 9)*(0 ∪ 5);
- c*(a ∪ b)(a ∪ b ∪ c)*;
e
- (a(b ∪ c)*a ∪ b ∪ c)*.
-
Simplifique as expressões regulares seguintes:
- (s)
∅* ∪ a* ∪
b*(a ∪ b)*;
-
aa*b ∪ b;
- (s)
b*(a ∪ (b*a*)*)ab*(ab*)*b;
- (+)
(a*b)* ∪ (b*a)*.
-
Para o autómato finito determinista M = ({q0,
q1, q2}, {a,b}, δ, q0,
{q2}), com a função de transição δ dada pela
tabela
δ | a | b
|
---|
|
q0 | q0 | q1
|
q1 | q2 | q1
|
q2 | q2 | q0
|
- Desenhe o diagrama de estados.
-
Escreva as computações de M para as palavras abaa e
bbbabb, referindo se as palavras são aceites ou não.
-
Escreva uma expressão regular que represente a linguagem
reconhecida por M.
-
Seja M = ({q0, q1, q2}, {x,y},
{(q0,x,q1), (q0,y,q0),
(q1,x,q1), (q1,y,q2),
(q2,x,q1), (q2,y,q0)},
q0, {q0}) um autómato finito determinista.
-
Desenhe o diagrama de estados.
- (s)
Escreva uma expressão regular que represente a linguagem
reconhecida por M.
- (s)
Repita a alínea anterior para o autómato finito determinista
M' que só difere de M no conjunto de estados de aceitação, que
no caso de M' é {q0, q1}.
-
Construa um autómato finito determinista que reconheça a linguagem
das palavras sobre {a,b,c} em que todos os a's precedem
todos os b's que, por sua vez, precedem todos os
c's (donde que todos os a's precedem todos os
c's), podendo não haver nem a's, nem
b's, nem c's
-
Construa um autómato finito determinista que reconheça a linguagem
das palavras sobre {a,b} que não têm aa como subpalavra.
-
Construa um autómato finito determinista que reconheça a linguagem
das palavras sobre {a,b,c} em que cada b é seguido
imediatamente por cc.
-
Construa um autómato finito determinista que reconheça a linguagem
das palavras não vazias sobre {a,b} em que o número de
a's é divisível por 3.
-
Construa um autómato finito determinista que reconheça
L((ab)*(ba)*).
-
Defina um AFD que reconheça a linguagem do exercício 5.
-
Considere a linguagem de todos os números inteiros sem sinal,
escritos em base 3, em que o último algarismo ocorre anteriormente
no número. Por exemplo, 1202 e 00 pertencem a esta linguagem, mas
1002 e 1 não. (Os números escritos em base 3 só podem ter os
algarismos 0, 1 e 2.)
-
Escreva uma expressão regular que a represente.
-
Defina um autómato finito que a reconheça.
- (+)
Apresente um autómato finito determinista que a reconheça.
(Sugestão: tente construí-lo directamente, sem recorrer a
qualquer algoritmo.)
-
Seja M = ({0,1,2}, {a,b,c}, δ, 0, {1,2}) um autómato finito
não determinista cuja função de transição δ é
δ | a | b | c | λ
|
---|
|
0 | {0} | | {1} | {2}
|
1 | | | {1} |
|
2 | | {1,2} | |
|
Construa um autómato finito determinista equivalente a M, usando o
algoritmo dado nas aulas, e apresente uma expressão regular que
represente a linguagem por ele reconhecida.
- (s)
Repita o exercício anterior para o autómato finito não
determinista N = ({0,1,2,3}, {m,n}, δ, 0, {1}), cuja função
de transição δ é
δ | m | n | λ
|
---|
|
0 | {1} | {2} | {1}
|
1 | | {1,3} |
|
2 | | | {3}
|
3 | {1,3} | {2} |
|
- (s)
Considere a linguagem de todas as palavras sobre {a,b} em que o
antepenúltimo símbolo é b.
-
Defina um autómato finito (não determinista) que reconheça
esta linguagem.
-
Aplicando o algoritmo dado nas aulas, construa um autómato
finito determinista equivalente ao autómato finito da alínea
anterior.
- (+)
Repita o exercício anterior para a linguagem de todas as palavras
sobre {a,b} em que o terceiro e o antepenúltimo símbolos são
b. São exemplos de palavras que pertencem a esta
linguagem as palavras aababaa, abbbbbbbb,
abba e bbb.
-
Sejam M1 = (Q1, T, δ1,
q01, F1) e M2 = (Q2,
T, δ2, q02, F2) dois
autómatos finitos tais que Q1 e Q2 são
disjuntos.
Defina um autómato finito M12 tal que L(M12) =
L(M1) ∪ L(M2)
- (s)
Aplicando o algoritmo dado nas aulas, construa o autómato finito
determinista mínimo equivalente a M = ({A,B,C,D,E,F}, {a,b},
δ, A, {B,D}), com a função de transição dada na tabela
δ | a | b
|
---|
|
A | B | E
|
B | E | C
|
C | D | F
|
D | F | C
|
E | F | F
|
F | E | F
|
e apresente uma expressão regular que represente L(M).
-
Considere o autómato finito não determinista M = ({1,2,3,4,5},
{x,y}, δ, 1, {5}), com a função de transição dada na tabela
δ | x | y
|
---|
|
1 | {1} | {1,2}
|
2 | ∅ | {3}
|
3 | {3} | {3,4}
|
4 | ∅ | {5}
|
5 | {5} | {5}
|
-
Construa o AFD equivalente a M.
-
Construa o AFD mínimo equivalente a M.
- (s)
Considere a linguagem representada por (aaa)* reunida
com (aa)*.
-
Defina um autómato finito (não determinista) que reconheça
aquela linguagem.
-
Construa o AFD equivalente ao autómato finito definido na
alínea anterior.
-
Construa o AFD mínimo equivalente ao AFD obtido na alínea
anterior.
-
Repita o exercício anterior para a linguagem das palavras sobre
{a,b,c} que têm ababc como subpalavra.
-
Mostre que a linguagem L =
{1n+1m=1n+m | n,m ≥ 0} não é
uma linguagem regular.
-
Mostre que a linguagem das palavras capicuas sobre {a,b} não é uma
linguagem regular.
-
Desenvolva uma gramática independente do contexto que gere a linguagem { wcwR | w ∈
{a,b}*}.
-
Desenvolva uma gramática independente do contexto que gere a linguagem { wcn | w
∈ {a,b}* e n=|w| }.
-
Desenvolva uma gramática independente do contexto que gere a linguagem {
aibjck
| k ≥ 0 e i+j=k }.
- (s)
Construa uma gramática independente do contexto que gere a
linguagem { anbm | m,n ≥ 0 e m ≠ n }.
-
Defina uma gramática independente do contexto
que gere os naturais sem zeros não significativos.
-
Defina uma gramática independente do contexto
que gere os reais (incluindo os negativos) em que: a parte inteira
é não vazia e não tem zeros não significativos; a parte decimal é
não vazia e só termina em zero se for constituída por um único 0;
e as partes inteira e decimal são separadas por uma vírgula.
-
Seja L a linguagem de todas sequências de parêntesis, curvos
— ‘(’ e ‘)’ — e rectos —
‘[’ e ‘]’ —, bem emparelhados.
Pertencem a esta linguagem palavras como λ,
“()”, “[]”, “()[()]”,
“([()])” e “([][([])])[]”. Não pertencem a
L palavras como “]”, “(”,
“(]”, “([)]”, “)(” e
“[()]]”.
- Mostre que L não é regular.
- Defina uma gramática independente do contexto que gere L.
- (s)
Considere um conjunto V de variáveis e um conjunto F de símbolos
de função, cada um com uma aridade maior que ou igual a zero. Um
termo é definido como:
- uma variável é um termo;
- um símbolo de função de aridade 0 é um termo;
- se t1, t2, ...,
tk, k > 0, são termos,
então, para todos os símbolos de função f de
aridade k, f(t1,
t2, ..., tk) é um
termo;
- nada mais é um termo.
Defina uma gramática independente do contexto que gere os termos
descritos. (Use os símbolos v e f como
representantes das variáveis e dos símbolos de função,
respectivamente. Exemplos de termos são v, f,
f(v) e f(v,f(f(f),f)). )
-
Considere a gramática G = ({A}, {a,b}, {A -> AA | aAb |
λ}, A).
-
Construa uma derivação esquerda para a palavra aababb
e a respectiva árvore de derivação.
-
Construa uma derivação direita para a palavra ababab
e a respectiva árvore de derivação.
-
Determine se G é ambígua. Em caso afirmativo, apresente uma
gramática não ambígua equivalente.
- (s)
Considere a gramática independente do contexto G = ({S}, {a}, {S
-> aa | SS}, S).
- Mostre que a gramática é ambígua.
- Apresente uma gramática equivalente não ambígua.
- Apresente uma gramática regular equivalente.
- Apresente uma expressão regular que represente a linguagem
gerada pela gramática.
-
Resolva o exercício anterior para a gramática G = ({S,A}, {a}, {S
-> λ | AS, A -> λ | a}, S)
-
Defina um autómato de pilha que reconheça a linguagem { w | w
∈ {a,b}* e w = w R }. Será possível
definir um autómato de pilha determinista que reconheça esta
linguagem? Justifique a sua resposta.
- (s)
Defina um autómato de pilha que reconheça L = { 1n +
1m = 1m+n | n,m ≥ 0 } e indique se ele é
determinista ou não determinista.
-
Considere a linguagem de todas as palavras sobre {a,b} em que o
número de a's é igual ao número de b's.
-
Defina um autómato de pilha não determinista que a reconheça.
- (+)
Defina um autómato de pilha determinista que a reconheça.
-
Construa um autómato de pilha que reconheça a linguagem {
c2id3i | i ≥ 0 }.
-
Considere a gramática independente do contexto G = ({S,B,C},
{a,b,c}, P, S), com P o conjunto de produções
S -> aS | bS | B
B -> bb | C | λ
C -> cC | λ
-
Escreva uma expressão regular que represente a linguagem
gerada por G.
-
Construa uma gramática (essencialmente) não contraível
equivalente.
-
Elimine as produções unitárias da gramática obtida na alínea
anterior.
-
Repita o exercício anterior para a gramática G = ({S,A,B,C},
{a,b,c}, P, S), com produções P
S -> ABC | λ
A -> aA | a
B -> bB | A
C -> cC | λ
-
Repita o exercício anterior para a gramática G = ({S,A,B}, {a,b},
P, S), com produções P
S -> BSA | A
A -> aA | λ
B -> Bba | λ
-
Construa uma gramática equivalente a G = ({S,A,B,C}, {a,b,c}, P,
S), com produções P
S -> A | B | C
A -> aa | B
B -> bb | C
C -> cc | A
que não contenha produções unitárias e escreva uma expressão
regular que represente a linguagem gerada por esta gramática.
-
Construa uma gramática equivalente a G = ({S,A,B,C,D,E,F,G},
{a,b}, P, S), com produções P
S -> aA | BD
A -> aA | aAB | aD
B -> aB | aC | BF
C -> Bb | aAC | E
D -> bD | bC | b
E -> aB | bC
F -> aF | aG | a
G -> a | b
sem símbolos inúteis e encontre uma expressão regular que
represente a linguagem gerada por esta gramática.
-
Construa uma gramática equivalente a G = ({S,A,B,C}, {a,b,c}, P,
S), com produções P
S -> aAbB | ABC | a
A -> aA | a
B -> bBcC | b
C -> abc
na forma normal de Chomsky.
- (s)
Construa uma gramática equivalente a G = ({A,B}, {a,b}, P, A), com
produções P
A -> aAb | B
B -> Bb | λ
na forma normal de Greibach.
-
Repita o exercício anterior para a gramática G = ({S,A,B}, {a,b},
P, S), com produções P
S -> A | B
A -> AAA | a | B
B -> BBb | b
-
Calcule os símbolos directores e determine se as seguintes
gramáticas são LL(1):
-
G1 = ({S,A,B}, {a,b,c,#}, {S -> AB#, A -> aAb | B,
B -> aBc | λ}, S)
-
G2 = ({S,A,B,C}, {a,b,c,d,#}, {S -> ABC#, A -> aA | λ,
B -> bBc | λ, C -> cA | dB | λ}, S)
- (s)
G3 = ({S,A,B,C,D}, {a,b,c,d,#}, {S -> aAd#, A -> BCD,
B -> bB | λ, C -> cC | λ,
D -> bD | λ}, S}
-
Modifique a gramática G = ({S,A,B,C}, {a,b,c,#}, P, S) de modo a
obter uma gramática LL(1) equivalente. As produções P de G são:
S -> aA# | abB# | abcC#
A -> aA | λ
B -> bB | λ
C -> Cc | λ
-
Defina uma gramática LL(1) que gere a linguagem das expressões
aritméticas com subtracção, multiplicação e parêntesis. (Use o
símbolo n para representar os inteiros.)
-
Considere a gramática G = ({S,A,B}, {a,b,#}, {S -> aBA#, A
-> b | aB, B -> a | bB}, S).
-
Construa o autómato dos itens válidos de G.
-
Diga, justificando, se G é LR(0).
-
Construa a tabela de análise sintáctica para G.
-
Defina o autómato de pilha reconhecedor LR(0) para G.
-
Repita as duas primeiras alíneas do exercício anterior para a
gramática G = ({S,A,B}, {a,b,#}, {S -> aA# | AB#, A -> aAb |
b, B -> ab | b}, S). Se a gramática não é LR(0), enumere os
conflitos encontrados.
-
Repita o exercício anterior para a gramática G = ({X,Y,Z},
{0,1,#}, {X -> ZY# | 1YZ#, Y -> 0Y | λ, Z -> Z1 |
1}, X).
- (s)
Considere a gramática G = ({S,A,B}, {a,b}, P, S), com P o
conjunto de produções:
S -> AB
A -> aA | λ
B -> Bb | λ
-
Construa o autómato dos itens LR(1) válidos de G.
-
Diga, justificando, se G é LR(1).
-
Construa o autómato amalgamado e diga, justificando, se G é
LALR(1).
-
Construa a tabela de análise sintáctica LR(1) para G.
-
Com base no autómato dos itens válidos de G, defina o autómato
de pilha reconhecedor LR(1).
-
Construa a computação do autómato de pilha para a palavra
aabb.
- (s)
Repita o exercício anterior com a gramática G = ({S,A,B},
{a,b}, P, S), com P o conjunto de produções:
S -> ABA
A -> Aa | λ
B -> bB | b
- (s)
Repita as primeiras 4 alíneas do exercício anterior com a
gramática G = ({S}, {a}, P, S), com P o conjunto de produções:
S -> aSa | λ
(Se G não é LR(1), não faça as alíneas que não se aplicam.)
-
Repita o exercício anterior com a gramática G = ({S,E,F},
{w,x,y,z}, P, S), com P o conjunto de produções:
S -> Ex | yEw | Fw | yFx
E -> z
F -> z
-
Repita o exercício anterior com a gramática G = ({S,C},
{c,d}, P, S), com P o conjunto de produções:
S -> CC
C -> cC | d
-
Repita o exercício anterior com a gramática G = ({E,T},
{i,+,(,)}, P, E), com P o conjunto de produções:
E -> E+T | T
T -> i | (E)
-
Mostre que determinar se o programa p inicializa a
variável X quando corrido com dados (input)
d é indecidível. (Um programa inicializa a variável
X se executa uma instrução X := e, tal que
X não ocorre na expressão e.)
- (s)
Mostre que o problema de decisão "o programa p executa a
instrução i quando corre com dados nil?" é
indecidível. (A instrução i pode ser, por exemplo, X
:= 0.)
-
Mostre que o problema de decisão "o programa p termina
para algum valor dos dados?" é indecidível.
-
Mostre que o problema de decisão "o programa p termina
para todos os dados?" é indecidível.
-
Mostre que determinar se a variável X toma o valor
d nalgum ponto da execução do programa p com
dados d é indecidível.
Os exercícios assinalados com (+) são de resolução mais complicada ou
mais trabalhosa que os restantes.