Académique Documents
Professionnel Documents
Culture Documents
Como proposta inicial para este exerccio, faa apenas para os nmeros de I a XCIX (1 a 99).
4) Crie expresses regulares para representar cada uma das linguagens regulares descritas a seguir:
a. Nmeros romanos de 1 a 99.
b. Valores monetrios em Reais. Possuem exatamente duas casas decimais depois da vrgula, e usam ponto
como separador de milhar.
Exemplos: { R$2,35 ; R$1.546,98 ; R$1,00 ; R$10.000.000.000,00 }
c. Strings que possuem uma quantidade par de as sobre o alfabeto = {a,b,c}
d. Strings que possuem tamanho mltiplo de trs, sobre o alfabeto = {a,b,c}
e. Strings com pelo menos um 1 sobre o alfabeto = {0,1}
f. Strings terminadas em 110 sobre o alfabeto = {0,1}
g. Strings contendo 00 sobre o alfabeto = {0,1}
h. Strings iniciadas e terminadas em 10 sobre o alfabeto = {0,1}
i. Strings formadas por uma seqncia de a's seguida de uma seqncia de b's e terminada por uma
seqncia de c's. possvel que cada uma das trs seqncias descritas no possuam caracteres, mas se
eles ocorrerem devem estar na ordem: as, bs e cs. A string vazia no pode ser aceita. Considere o
alfabeto = {a,b,c}
5) (POSCOMP, 2004).
7) (POSCOMP, 2009)
8) (POSCOMP, 2012)
9) (ENADE, 2014)
19) A partir do AFND fornecido atravs da quntupla de elementos, faa o desenho do grafo, converta-o para um
AFD representando-o pelo desenho do grafo, reescreva a sua quntupla de elementos agora como AFD,
escreva a ER equivalente e a gramtica regular atravs de sua 4-upla de elementos.
M = (, Q, , q0, F)
= { a,b,c }
funo transio:
a b c
q0 {q0,q1} {q0} {q0}
q1 {} {q2} {}
q2 {} {} {q3}
q3 {} {} {}
F = {q3}
22) A partir do alfabeto = { a,b }, faa um AFND e uma ER para reconhecer e denotar, respectivamente a
linguagem:
23) Para cada uma das linguagens regulares descritas a seguir, faa uma ER (expresso regular), em seguida faa
um AFD (autmato finito determinstico), e por ltimo escreva a GR (gramtica regular) equivalente a partir
do algoritmo de transformao de ADF em GR.
25) A partir de uma sequenca de caracteres formada apenas por dgitos, ou seja, o alfabeto
= { 0,1,2,3,4,5,6,7,8,9 }, faa um AFD para buscar o nmero 153.
26) Considerando um texto formado apenas por elementos do alfabeto = { a,b,c }, construa uma AFD para
buscar as palavras aba e bac.
27) Considerando um texto formado apenas por elementos do alfabeto = { 0,1 }, construa uma AFD para
buscar as seguintes trs palavras: 10, 111 e 01.
a. a* b c+
b. (a|b)* ab
c. (ab)+
Dica: para provar que uma linguagem regular basta apresentar uma das trs abstraes (AFD, ER ou GR);
para provar que ela no regular use o Lema do Bombeamento provando por absurdo.
Observe ainda que apenas mostrar que uma linguagem satisfaz o lema do bombeamento no suficiente para
provar que ela regular.
e. { (ab)n ak | n >= k }
a. Ligar (1) ou desligar (0) uma mquina. Como o incio do funcionamento da mquina custoso, o
comando para ligar (1) deve ser repetido 3 vezes consecutivamente para que funcione. J o comando de
desligar (0) dado uma nica vez.
b. Devolver o bit lido com atraso de uma transio. Para o primeiro bit emita um 0.
36) Faa uma mquina de estados finitos (decida entre Mquina de Moore e Mquina de Mealy) para representar
a venda de caf em um quiosque automatizado. O caf custa 60 centavos e a mquina aceita somente moedas
de 10, 50 centavos e 1 real. O caf feito automaticamente quando a mquina atinge crdito de 60 centavos.
Havendo troco, o mesmo entra como crdito para o prximo caf.
41) Faa uma gramtica livre de contexto (GLC) para cada uma das linguagens de nvel 2, ou seja, livres de
contexto.
b. { ai bi ak bk | i >= 0, k >= 1 }
c. { ai bk ak bi | i,k >= 0}
d. { (ab)i c bi | i >= 0}
f. { ai ck bn | i=k ou k=n}
g. { ai bn | i diferente de n}
a) S -> aS | bB |
B -> cB |
c) S -> aSbb | A
A -> cA | c
d) S -> AAASb |
A -> a |
e) S -> aaSB |
B -> bB | b
49) Elabore uma gramtica livre de contexto para gerar expresses com parnteses, colchetes e chaves balanceadas, as
quatro operaes bsicas, nmeros e variveis. Admita a existncia de tokens para representar cada um dos elementos
Exerccios de Ling. Formais e Autmatos prof. Henrique M. Cristovo 2017/1 pgina 17 / 38
citados.
({[(2)]}), [2-{x-5}]
50) A partir do exerccio anterior, faa a seguinte modificao: parnteses, colchetes e chaves so opcionais, mas se eles
aparecerem na mesma expresso eles devem obedecer a seguinte ordem: parnteses (mais internos), colchetes e chaves
(mais externos).
Exemplos corretos:
[2*(4+3)], 100, {w-[3-5]+{4-(x-((y)))-1}-9}-8, valor+contador
Exemplos incorretos:
({[(2)]}), [2-{x-5}]
51) Desafio: no exerccio anterior, somente permita a ocorrncia de colchetes se houver parnteses internos, e chaves se
houver colchetes.
52) Desenvolva uma gramtica livre de contexto para gerar expresses aritmticas no estilo da linguagem LISP. Use
apenas nmeros inteiros sem sinal. Considere, para cada operao, exatamente dois operandos. Suponha a existncia de
tokens para os elementos que compem as expresses.
Exemplos: (+ 2 3)
(- (* 20 30) 4)
(+ (+ 1 4) (+ 3 (+ 3 5)))
53) Elabore uma gramtica para gerar declaraes de classes em Java. Assuma que o corpo da classe j est pronto.
Observaes:
Antes da palavra reservada class possvel aparecer um modificador de acesso: public, private ou
protected.
possvel a ocorrncia da palavra abstract (antes ou depois do modificador de acesso).
S pode haver uma classe Pai no caso de herana com extends, e vrios Pais em herana com implements
(herana mltipla). As clusulas extends e implements devem aparecer nesta ordem.
Classes interface s podem herdar de classes interface (devem usar a palavra implements). Neste caso, no
possuem modificador de acesso.
a) Crie uma gramtica no ambgua para resolver o problema do else flutuante. Considere que um else sempre
pertence ao if mais prximo.
Por exemplo, no caso abaixo (com identao errada de forma proposital) o else pertence ao if(y>8)
Considere disponveis todos os tokens necessrios.
56) Retire a recursividade esquerda e fatore (quando for possvel) os trechos de gramticas a seguir.
a) lista -> <IDENT> <VIRG> lista | <IDENT>
c) S -> aS | bS | cS | aA | aB | aC | bA | bB | bC
h) A -> Aa | b | c | Ad
i) S -> Sab | SA | aA | aS | c
57) Reescreva as gramticas na Forma normal de Chomsky e na Forma Normal de Greibach. Considere as letras
maisculas como smbolos no terminais e as minsculas como smbolos terminais.
a) S -> aS | Sb | c
b) E -> E o E | a E a | n
58) A partir da gramtica BNF do Pascal fornecida no anexo A desta lista de exerccios, responda os itens solicitados. No
use seu conhecimento sobre a linguagem Pascal. importante ressaltar que muitos erros que um compilador acusa so
provenientes do analisador semntico e que no poderiam ser detectados pela gramtica usada na anlise sinttica.
j) A estrutura while permite expresses condicionais contendo atribuies, tal como permitido na Linguagem C?
Exemplo: while x:=x+1 do ...
59) Analise a gramtica do Java que segue no anexo B. Observe que ela usa um o formato BNF estendido (EBNF), ou seja,
o lado direito das regras usa os mesmos metasmbolos que so permitidos nas expresses regulares.
A seta substituda por um sinal de igual e os terminais so representados entre apstrofos, alm disso a regra completa
terminada por um ponto-e-vrgula.
b) No sintaxe do Java atual, o uso das chaves obrigatrio nos comandos de tratamento de erros catch e
finally, mesmo que exista apenas uma linha em seu corpo. Sendo que possvel vrios catch para um mesmo
try, mas apenas um finally.
Como a gramtica fornecida se comporta diante de tal situao?
c) Na declarao de uma funo em Pascal possvel usar a escrita de um mesmo tipo para vrios argumentos:
function FazAlgo(arg1,arg2:Integer; arg3,arg4:Real): UmTipo;
Exerccios de Ling. Formais e Autmatos prof. Henrique M. Cristovo 2017/1 pgina 21 / 38
Existe possibilidade de fazer algo parecido em Java?
d) Existem vrias situaes nesta gramtica onde as regras poderiam ser simplesmente substitudas por expresses
regulares, ou seja, poderiam ser meramente tokens. Cite alguns casos em que isto ocorre, fornecendo em seguida a
respectiva expresso regular.
63) Faa uma gramtica no formato EBNF para gerar declarao de arrays multidimensionais em Pascal.
Formato geral:
lista_de_identificadores : array [li1..ls1, li1..ls1,..., li1..ls1] of tipo;
65) A partir da linguagem descrita a seguir, crie todos os tokens necessrios atravs de suas expresses regulares. Crie
tambm a gramtica livre de contexto no formato EBNF.
A seguinte linguagem descrita representa a Lgica Proposicional e trabalha com expresses proposicionais. Ela possui 4
comandos:
1. comando de atribuio:
varivel := expresso
2. comando de exibio:
4. comando condicional:
if(expresso) {
comandos_1
}
else {
comandos_2
}
Os comandos de atribuio, exibio e de entrada de dados devem ser terminados por ponto-e-vrgula.
Os nomes das variveis so formadas por uma seqncia de letras minsculas e/ou dgitos. Mas, sempre devem iniciar
Exerccios de Ling. Formais e Autmatos prof. Henrique M. Cristovo 2017/1 pgina 23 / 38
por letra.
A linguagem case-sensitive.
A expresso formada por parnteses balanceados, valores lgicos, variveis, operadores lgicos.
in a;
out a;
in a, b,c;
out a ^ b, a v b, a -> c;
in a,b,c;
d := a ^ (b <-> c);
if(d) {
out d ^ a;
}
else{
out d ^ c;
}
a := "v";
b := "f";
c := a -> b;
out c,c ^ 1;
in a,b,c;
d := (b' v a) ^ ((b <-> c) v (c'' ^ a)')';
if(a ^ (b <-> c)) {
e := 1;
f := 0;
out d ^ a;
}
else{
if(d) {
e := 0;
}
else{
f := 1;
}
out d v a;
}
out e ^ f;
a) ( ) { c an c bn c | n 0 }
b) ( ) { an bn | n 2 }
d) ( ) { ai bn ck | k = i+n }
e) ( ) { ai bn ck | n = i+k }
g) ( ) { an bn cn dn | n1 }
h) ( ) { a2n b an a2n | n0 }
i) ( ) { ai bi ak bk | i 0, k 1 }
k) ( ) { ai bk ak bi | i,k 0}
l) ( ) { (ab)i c bi | i 0}
n) ( ) { ai bn | i diferente de n}
o) ( ) { bb ai bb ai bb ai bb | i 1 }
p) ( ) { a2i bi c2i | i 0 }
ANEXO A
SUDKAMP, Thomas A. Languages and machines: an introduction to the theory of computer science. 2. ed. Massachusets:
Addison-Wesley Publishing Company, Inc., 1997. Appendix III.