TACIANE DE OLIVEIRA E SILVA (RA: 92337) THIAGO HIDEKI SATO (RA: 92341) THOMAS AUGUSTO TEIXEIRA DE ALBUQUERQUE (RA: 92343) TIAGO ALEXANDER LEAL RUZZON (RA: 92346)
Relatório Relatório Li ngu agens agens Formais e Autô Autômatos matos Professor Dr. Antonio Augusto Chaves
São José dos Campos – SP 2016
Aula Au la 0: Indu In dução ção
1) Seja . Faça a demonstração por indução que a = fórmula é . Base: n = 1, = Hipótese: Suponha que vale para k = n – 1, ou seja,
∑ ! ! 1 1! 1 2! 1 1 ∑ ∑ ! 1 ∗ 1! 1 1 −
( (!) ( 1 1)! 1 ! 1 Passo indutivo:
= −
(!) (!) ∗ ! !1 ∗ ! !! 1 1 = = 1! 1 2) Prove por indução que a soma dos cubos de três inteiros positivos consecutivos é sempre divisível divisível po r 9. Problema: . Base: a = 1, Hipótese: Suponha que vale para k = n – 1, ou seja,
1 2 9, 9, ∈ Ν 1 1 1 1 2 1 1 8 27 36 4 ∗ 9. 1 2 9 ∗ 1 ( 1 1) ( 1 2) 9∗ 1 1 9 ∗
Passo indutivo: Vamos mostrar que vale para
1 ( 1 1) 1 2 1 2 4 4 1 4 4 2 8 8 1 6 12 8 1 6 9 12 9 8 9 9 9 9 1 3 3 1 9 1 1 1 9 1 Pela hipótese de indução, então:
1 2 9 ∗ 9 1 9 1 9 ∗ , ∈ Ν.
Página | 1
Aula Au la 0: Indu In dução ção
1) Seja . Faça a demonstração por indução que a = fórmula é . Base: n = 1, = Hipótese: Suponha que vale para k = n – 1, ou seja,
∑ ! ! 1 1! 1 2! 1 1 ∑ ∑ ! 1 ∗ 1! 1 1 −
( (!) ( 1 1)! 1 ! 1 Passo indutivo:
= −
(!) (!) ∗ ! !1 ∗ ! !! 1 1 = = 1! 1 2) Prove por indução que a soma dos cubos de três inteiros positivos consecutivos é sempre divisível divisível po r 9. Problema: . Base: a = 1, Hipótese: Suponha que vale para k = n – 1, ou seja,
1 2 9, 9, ∈ Ν 1 1 1 1 2 1 1 8 27 36 4 ∗ 9. 1 2 9 ∗ 1 ( 1 1) ( 1 2) 9∗ 1 1 9 ∗
Passo indutivo: Vamos mostrar que vale para
1 ( 1 1) 1 2 1 2 4 4 1 4 4 2 8 8 1 6 12 8 1 6 9 12 9 8 9 9 9 9 1 3 3 1 9 1 1 1 9 1 Pela hipótese de indução, então:
1 2 9 ∗ 9 1 9 1 9 ∗ , ∈ Ν.
Página | 1
Aula Au la 1: 1 : DFA
Monte um autômato que reconhece:
∈
1) {w | w é da form a x01y e x e y {0,1 { 0,1}*}. }*}.
2) {w | w tem número par de 0’s}.
3) {w | w tem ao mesmo tempo número par de 0’s e 1’s}.
4) {w | w termina em 00}. 00}.
5) {w | w tem 3 0’s consecutivos}.
Página | 2
6) {w | w tem tem 011 011 como substring }.
7) {w | w tem número de 0’s divisível por 5 e 1’s divisível por 3}.
Página | 3
Aula Au la 2: DFA
Desenhe autômatos que aceitam as seguintes linguagens sobre o alfabeto {0,1}: 1) Todos os strings qu e contêm exatamente exatamente 4 zeros. zeros.
2) Todos os strings que term inam in am em 1101. 1101.
3) Todos os strings que contêm exatamente 4 0’s e pelo menos 2 1’s.
Página | 4
4) Todos os strings cujo valor b inário é divisível por 5.
5) Todos os strings que contêm o substring 0101.
6) Todos os strings que começam com 0 e têm compr imento ímpar ou com eçam com 1 têm comp rimento par.
7) Todos os strings que não contêm o substring 110.
Página | 5
8) Todos os strings com co mprimento no máximo igual a 5.
9) Todos os strings que têm 1 em posiçõ es ímpares.
Página | 6
Aula 3: DFA
Construa um DFA para as seguintes linguagens:
∈
1) {w {0,1}* | cada 0 de w é im ediatamente seguid o de, no mínimo , dois 1’s}.
∈
2) {w {0.1}* | w não co ntém 000 nem 111}.
∈
3) {w {a, b}* | w com eça com a e tem tamanho par}.
Página | 7
∈
4) {w {0,1}* | w começa ou termin a ou ambos co m 01}.
5) {w
∈ {0,1}* | w apresenta todo 0 entre dois 1’s}.
6) Implementar um programa na linguagem C capaz de ler dois arquivos, sendo que o pr imeiro c ontém a descrição de um DFA e o segundo uma string para reconhecimento. #include #include #include #include int tam; typedef struct dados { int **matriz, n, m, qtd_final; int inicio; int *estado_final; }dados; dados* ler_matriz_arq(char str[]){ Página | 8
int i, j; dados *d = (dados*)malloc(sizeof(dados)); FILE *arq = fopen(str, "r"); fscanf (arq, "%d %d", &d->n, &d->m); //n: n úmero de estados. m: alfabeto. d->matriz = (int**)malloc(d->n*sizeof(int*)); for (i=0; in; i++){ d->matriz[i] = (int*)malloc(d->m*sizeof(int)); } for (i=0; in; i++){ for (j=0; jm; j++){ fscanf(arq, "%d", &d->matriz[i][j]); } } //Estado inicial fscanf(arq, "%d", &d->inicio); //Estado final fscanf(arq, "%d", &d->qtd_final); d->estado_final = (int*)malloc(d->qtd_final*sizeof(int)); for(i=0; iqtd_final; i++){ fscanf(arq, "%d", &d->estado_final[i]); } fclose(arq); return d; } int* string_reconhecimento (char str[]){ int i; int *string_r = (int*)malloc(20*sizeof(int)); FILE *arq = fopen (str, "r"); fscanf (arq, "%d", &tam); for (i=0; i
Página | 9
dados *dado; char *arq1 = (char*)malloc(20*sizeof(char)); char *arq2 = (char*)malloc(20*sizeof(char)); int *teste = (int*)malloc(20*sizeof(int)); scanf("%s", arq1); scanf("%s", arq2); dado = ler_matriz_arq (strcat(arq1,".txt")); teste = string_reconhecimento (strcat(arq2, ".txt")); estado = dado->inicio; for (i=0; imatriz[estado][teste[i]]; } for (i=0; iqtd_final; i++){ if(estado == dado->estado_final[i]) verificacao = true; } if (verificacao) printf("TRUE"); else printf("FALSE"); return 0; }
Página | 10
Aula 4: NFA 1) Construir NFA’s para as seguintes linguagens regulares: a. Todos os strings que contêm exatamente 4 0’s ou um número par de 1’s.
b. Todos os strings em que o terceiro símbolo a partir da direita é 0.
c. Todos os strings em que ocorrem 2 0’s separados por uma str ing de com prim ento 4i para algum i>=0.
d. Todos os str ings que cont ém a subs tri ng 0101.
Página | 11
e. Todos os strings que contêm um número par de 0’s ou exatamente dois 1’s.
f. 0*1*0*0.
2) Faça dois exemplos de transições para cada NFA produzido na questão 1. a. Exemplo 1: String 0001.
̂0,0001 (̂0,000,1) 4,1⋃6,1 4,7 ̂0,000 (̂0,00,0) 3,0⋃6,0 4,6 ̂0,00 (̂0,0,0) 2,0⋃6,0 3,6 ̂0,0 (̂0,,0) 1,0⋃6,0 2,6 ̂0, 1 ⋃ 6 A string 0001 não pertence a esta linguagem regular. Exemplo 2: String 11.
̂0,11 (̂0,1,1) 1,1⋃7,1 1,6 ̂0,1 (̂0,,1) 1,1⋃6,1 1,7 ̂0, 1 ⋃ 6 A string 11 pertence a esta linguagem regular.
Página | 12
b. Exemplo 1: String 011.
̂0,011 (̂0,01,1) 0,1⋃2,1 0,3 ̂0,01 (̂0,0,1) 0,1⋃1,1 0,2 ̂0,0 (̂0,,0) 0,0 0,1 ̂0, 0 A string 011 pertence a esta linguagem regular. Exemplo 2: String 111.
̂0,111 (̂0,11,1) 0,1 0 ̂0,11 (̂0,1,1) 0,1 0 ̂0,1 (̂0,,1) 0,1 0 ̂0, 0 A string 011 não pertence a esta linguagem regular. c. Exemplo 1: String 001.
̂0,001 (̂0,00,1) 0,1⋃1,1⋃2,1 0,3,2 ̂0,00 (̂0,0,0) 0,0⋃1,0 0,1,2 ̂0,0 (̂0,,0) 0,0 0,1 ̂0, 0 A string 001 pertence a esta linguagem regular. Exemplo 2: String 01.
̂0,01 (̂0,0,1) 0,1⋃1,1 0,3 ̂0,0 (̂0,,0) 0,0 0,1 ̂0, 0 A string 01 não pertence a esta linguagem regular. d. Exemplo 1: String 0101.
̂0,0101 (̂0,010,1) 0,1⋃1,1⋃3,1 0,2,4 ̂0,010 (̂0,01,0) 0,0⋃2,0 0,1,3 ̂0,01 (̂0,0,1) 0,1⋃1,1 0,2 ̂0,0 (̂0,,0) 0,0 0,1 ̂0, 0 A string 0101 pertence a esta linguagem regular. Exemplo 2: String 01. Página | 13
̂0,01 (̂0,0,1) 0,1⋃1,1 0,2 ̂0,0 (̂0,,0) 0,0 0,1 ̂0, 0 e. Exemplo 1: String 001.
̂0,001 (̂0,00,1) 1,1⋃3,1 1,4 ̂0,00 (̂0,0,0) 2,0⋃3,0 1,3 ̂0,0 (̂0,,0) 1,0⋃3,0 2,3 ̂0, 1,3 A string 001 pertence a esta linguagem regular. Exemplo 2: String 01.
̂0,01 (̂0,0,1) 2,1⋃3,1 2,4 ̂0,0 (̂0,,0) 1,0⋃3,0 2,3 ̂0, 1,3 A string 01 não pertence a esta linguagem regular. f. Exemplo 1: String 01.
̂0,01 (̂0,0,1) 0,1⋃2,1 1 ̂0,0 (̂0,,0) 0,0 0,2 ̂0, 0 A string 01 não pertence a esta linguagem regular. Exemplo 2: String 0110.
̂0,0110 (̂0,011,0) 1,0 2 ̂0,011 (̂0,01,1) 1,1 1 ̂0,01 (̂0,0,1) 0,1⋃2,1 1 ̂0,0 (̂0,,0) 0,0 0,2 ̂0, 0 A string 0110 pertence a esta linguagem regular.
Página | 14
Aula 5: Conversão NFA para DFA 1) Mostre que a seguinte linguagem é regular: L = {conjunto de strings que cont êm igual nú mero de oco rrênci as de 01 e 10}.
2) Converta o seguinte NFA em DFA. Represente usando tabela e diagrama de transições. 0 → p {p,q}
q
{r}
r
{s}
*s
{s}
1 {p} {r}
{s}
Resolução: 0 →p {p,q} p,q {p,q,r} p,r {p,q,s} p,q,r {p,q,r,s} *p,q,s {p,q,r,s} *p,q,r,s {p,q,r,s} *p,r,s {p,q,s} *p,s {p,q,s}
1 {p} {p,r} {p} {p,r} {p,r,s} {p,r,s} {p,s} {p,s}
Página | 15
3) Converta o seguinte NFA em DFA. Represente usando tabela e diagrama de transições. 0 → p {q,s}
1 {q}
*q
{r}
{q,r}
r
{s}
{p}
*s
{p}
Resolução:
→p
*q r *q,r *q,s *p,q,r *r,s *q,r,s *s lixo
0 {q,s} {r} {s} {r,s} {r} {q,r,s} {s} {r,s} lixo lixo
1 {q} {q,r} {p} {p,q,r} {p,q,r} {p,q,r} {p} {p,q,r} {p} lixo
Página | 16
4) Converta o seguinte NFA em DFA. Represente usando tabela e diagrama de transições. 0 → p {p,q}
1 {p}
q
{r,s}
{t}
r
{p,r}
{t}
*s *t
Resolução: 0 →p {p,q} p,q {p,q,r,s} *p,q,r,s {p,q,r,s} *p,t {p,q}
1 {p} {p,t} {p,t} {p}
Página | 17
5) Converta o NFA da lingu agem 0*1*0*0 em um DFA. NFA → q0
q1 *q2
DFA 0 {q0, q2} {q2} {q2}
1 {q1} {q1}
→ q0
q1 *q2 *{q0, q2} lixo
-
0 {q0, q2} {q2} {q2}
1 {q1} {q0} lixo
{q0, q2}
{q1}
lixo
lixo
NFA
DFA
Página | 18
Aula 6:
1) Considere o
. ε
a
b
c
{p} {q}
→p
q
{p} {q}
* r
{q}
{r}
{r}
{r}
{p}
a) Calcule o -fechamento de c ada estado.
CL(p) = {p} CL(q) = {p, q} CL(r) = {p, q, r} b) Converta o autômato em um DFA. a →p p {p, q} {p, q} *{p, q, r} {p, q, r}
b {p, q} {p, q, r} {p, q. r}
2) Repita o exercício 1 para o seguint e
ε
a
→ p {q,r}
q
{p}
c {p, q, r} {p, q, r} {p, q, r}
.
b
c
{q}
{r}
{r}
{p,q}
* r
Página | 19
CL(p) = {p, q, r} CL(q) = {q} CL(r) = {r} a → *{p, q, r} {p, q, r} *{q, r} {p, q, r} *{r} lixo Lixo
lixo
b {q, r}
c {p, q, r}
{r} lixo
{p, q, r} lixo
lixo
lixo
3) Prove que a linguagem é regular: con junto de todas as strings tais que cada bloco de 5 símbolos consecutivos contém pelo menos dois 0’s.
4) Consi dere o autômato M = ({q0, q1}, {0,1}, , q0, {q0, q1}) on de a funç ão é especific ada pelo diagrama:
a. Qual a lin guagem reconheci da por M? Strings da forma
01 tal que , ≥ 0. Página | 20
b. Considere M’ = ({q0, q1}, {0,1}, , q0,
). M’ é o autômato
complementar de M? Justifique.
Sim, pois o autômato complementar de M reconhece toda string que não escrita da forma
01 ; ou seja, que não aceita os estados finais
do autômato M. Desta forma, o autômato complementar de M não possui estados de aceitação. c. Constr ua o autôm ato complementar de M.
Página | 21
Aula 7: Exp ressões r egular es (RE) 1) Crie expressões regulares
∑ {0,1}:
a. {w | w contém um único 1};
0*.1.0* b. {w | w contém pelo menos um 1};
(0+1)*.1.(0+1)* c. {w | w cont em a string 001 como substring};
(0+1)*.0.0.1.(0+1)* d. {w | |w| é par};
((0+1).(0+1))* e. {w | |w| é um múlti plo de 3};
((0+1).(0+1).(0+1))* f. {w | 6 símbol o direita/esquerd a é 1}.
(0+1)*.1.(0+1).(0+1).(0+1).(0+1).(0+1) 2) Descr eva em portugu ês o conju nto denotado por cada uma das expressões regulares: a. 1*0: Possui somente um zero na última posição. Antes deste
zero, podemos ter quantos 1's quisermos inclusive nenhum. b. 1*0(0)*: Possui pelo menos um zero. Antes deste primeiro
zero, podemos ter quantos 1's quisermos inclusive nenhum. Após o primeiro zero, temos quantos 0's quisermos inclusive nenhum. c. 111 + 001: Conjunto formado por duas strings: 111 e 001. d. (1+00)*: Conjunto formado por 1's ou por dois zeros
consecutivos e suas combinações, a string vazia também é válida. e. (0(0)*1)*: Toda string (inclusive vazia) que começa com zero
e termina com 1, sem 1's consecutivos. f. (0 + 1)(0 + 1)*00: Toda string com comprimento maior que 2
(comprimento deve ser pelo menos 3) que termina com 00.
Página | 22
Aula 8: Expressõ es regulares (RE)
Escreva
expressões
regulares
correspondentes
as
seguintes
linguagens: 1) Conjunto de strings sobre o alfabeto {a, b, c} que contém pelo menos um a e pelo menos um b .
(a+b+c)*a(a+b+c)*b(a+b+c)* + (a+b+c)*b(a+b+c)*a(a+b+c)* 2) Conjunto de todos os strings de 0’s e 1’s tais que todo par de 0’s adjacentes aparece antes de qualquer par de 1’s adjacentes.
(0+10)*( +1)(1+01)*( +0) 3) O conjunto de todos strings que não contem o substring 101.
(1+000*)*+01+10 4) O conjunto de todos os stri ngs que têm no máximo um par de 0’s consecutivos ou um par de 1’s consecutivos.
Dar um equivalente as expressões regulares:
1*(01)*( +00)(10)*( +1) + 0*(10)*( +11)(01)*( +0) 5)
a. 0*1*
b. 00*11*
Página | 23
c. (00)*(11)*
d. (0 + 1)(0 + 1)*00
6) Determi ne a RE da linguagem aceita pelo autômato abaixo:
0(0(0+1)(0+1)*1+1)
7) Const ruir
o aut ômato
cor respo ndent e a RE ((00)*(11)*)*,
utilizando o algori tmo qu e transf orma RE em autômato. No final, utilize um algoritmo de minimização de estados de autômato a Página | 24
fim de minimizar o autômato produzido pelo algoritmo de transformação.
Página | 25
Aula 9: Min im ização de DFA ’s 1) Desenhe a tabela de disti nções para esse autômato e constr ua o DFA com o n úmero míni mo de estados equivalentes.
→A
B C *D E F G H
B C D E F G H
0 B A D D D G F G
1 A C B A F E G D
X2 X1
X1
X0
X0
X0
X1
X1
-
X0
X2
-
X1
X0
X1
-
X2
X1
X0
X1
X2
X1
X1
X1
X0
X1
X1
X1
A
B
C
D
E
F
G
Página | 26
2) Desenhe a tabela de disti nções para esse autômato e const rua o DFA com o n úmero míni mo de estados equivalentes.
→A
B *C D E *F G H *I
B C D E F G H I
X0 X0 X2 X1 X0 X2 X1 X0 A
X0 X1 X1 X0 X1 X1 X0 B
X0 X0 X0 X0 X0 X0 C
0 B C D E F G H I
1 E F H H I B B C
A
E
X1 X0 X2 X1 X0 D
X0 X1 X1 X0 E
X0 X0 X0 F
X1 X0 G
X0 H
Página | 27
3) Forneça um DFA mínimo q ue aceita todas as strings de 0’s e 1’s que termi na em 001. Prove qu e é mínimo.
→A
B C *D
B C D
X2 X1 X0 A 4) Forneça
0 B C C B
1 A A D A
X1 X0 X0 B C um DFA mínimo que aceita todas as strings de 0’s e 1’s
que contenha 110 como substring e verifique que o autômato seja mínimo.
→A
B C *D
B C D
X2 X1 X0 A
X1 X0 B
0 A A D D
1 B C C D
X0 C Página | 28
Aula 10: Lema do Bombeamento 1) Prove que a lin guagem L = {w | w consis te em todo s os strings com igual número de 0’s e 1’s} não é regular.
Em particular, {
01 , ≥ 1}
0 1 ≠ , || ≤ . Logo, y possui pelo menos um ZERO. , ≥ 0. Se 0, então (|| < e || ) Logo, ∉ . Portanto, a linguagem não é regular. a) b) c)
2) Tente provar qu e a linguagem (00+11)* é não regul ar.
1) Escolhe-se a linguagem (00 + 11)*. 2) Escolhe n. 3) Determina-se string w =
0.
≠ e |xy| ≤ n). Para , para qualquer i escolhido, w continuará pertencendo
4) w = xyz ( 5)
a L, portanto a linguagem é regular. 3) Seja = {0,1}. Se L1 = {0} e L2 = {1}*, determ ine:
∪ ∩ L1 ∪ L2 = (0 + 1*). L1 ∩ L2 = ∅.
a. L1 L2 e L1 L2
b. L1* e L2*
L1* = 0* L2* = 1*
∪ L1* ∩ L2 = ̅ = (0+1)*- 0 ̅ ∩ L1* = 0* - .∗ = (01*)*
c. (L1 L2)* = (0+1*)* d. e. f. g.
Página | 29
Aula 11: CFG 1) Construa CFG’s que gerem as seguintes linguagens sobre o alfabeto { 0,1}: a.
{ ≠ ≠ } → | → | → | → || → || → |
b. {w | w começa e termina com o mesmo símbolo}
I → I → 0I I → 1I P: → 1I1 → 0I0 G = {{E, I}, {0, 1}, P, E} c. {w | |w| é ímpar e o seu símbolo do meio é 0}.
I→ 0 P: I → 0I0 I → 0I1 I → 1I0 I → 1I1 G = {I, {0, 1}, P, I} d. Strings binários com duas vezes mais 1’s que 0’s.
I → P: I → 0I1I1I I → 1I0I1I I → 1I1I0I Página | 30
G = {I, {0, 1}, P, I} 2) A gramátic a a seguir g era a linguagem regular: 0*1(0+1)* S → A1B A → 0A |
B → 0B | 1B |
Forneça derivações mais à esquerda e mais à di reita dos strings: a. 00101 Mais à esquerda: S → A1B → 0A1B → 00A1B → 001B → 0010B → 00101B → 00101 Mais à direita: S → A1B → A10B → A101B → A101 → 0A101 → 00A101 → 00101
b. 1001 Mais à esquerda: S → A1B → 1B → 10B → 100B → 1001B → 1001 Mais à direita: B → 1B → 10B → 100B → 1001B → 1001
c. 00011 Mais à esquerda: S → A1B → 0A1B → 00A1B → 000A1B → 0001B → 00011B → 00011 Mais à direita: S → A1B → A11B → A11 → 0A11 → 00A11 → 000A11 → 00011
Página | 31
Aula 12: CFG 1) Construa CFG’s que gerem as seguintes linguagens: a. {w | |w| é par e maior qu e 0}.
→ | → 0|1 → b. {w | w contém um número par de 0’s}.
→ |1| →0 → c. {w | w possui o terceiro símbo lo da direita para a esquerda igual a 1}.
→ 0|1 → | | → 1 d. Strings que s ejam comentário s da f orma /#(a + b)#/
→ || | →/# #/ → e. {w | w possui número igual de 0’s e 1’s}.
→ 01|10| → 2) Mostre que para toda linguagem regular há uma gramática regular.
Para toda linguagem regular há uma gramática regular, pois, a concatenação, a união, o fechamento e o caso base podem ser escritos com uma gramática regular. União: | Concatenação: Fechamento:
→ → → |
Página | 32
3) Monte uma CFG que reconhece DOUBLE numa linguagem de programação.
→ 0|1|…|9 → | → . |. | → | | → | →
Página | 33
Aula 13: CFG 1) Construa CFG’s que gerem as linguagens: a.
b.
c.
d.
e.
f.
g.
∗| ≠ → | → | → | → || → | → | → || → +| ≥ → | | ≥ , ≥ → | → | → +|, > → | → | → | ≤ ≤ ≤ → ||| | → | → | → Página | 34
h.
i.
| ≤ ≤ → || → | → | → +|, > → | → | →
Página | 35
Aula 14: CFG 1) Seja G a gramátic a: S → abSc | A A → cAd | cd
a. Dê uma derivação de ababccd d.
→ → → → →
b. Constr ua árvore de análise sintática do item a.
c. Use notação de conjunto para definir L(G). 2) Seja G a gramátic a:
{ > 0 ≥ 0
A → aAb | S → ASB |
B → bBa | ba
a. Dê uma derivação mais à esquerda de aabbba.
→ → → → → →
b. Dê uma derivação mais à direita de abaabbbabbaa.
→ → → → → → → → → → → Página | 36
c. Constr ua a árvore de análise sintátic a para as derivações de a e b. Letra a)
Letra b)
d. Use notação de conjunto para definir L(G).
( ) ( ) | > 0 , > 0 3) Seja G a gramátic a: S → SAB |
Página | 37
A → aA | a B → bB |
a. Dê uma derivação à esquerda de abbaab.
→ → → → → → → → → → → b. Dê duas derivações à esquerda de aa.
→ → → → → → → → → → → c. Constr ua as árvor es de análise sintática de (b).
d. Dê uma expressão regul ar de L(G).
{ ) |,, ≥ 0 Página | 38
4) Mostre que a gramática abaixo é ambígua: S → 0A | 1B A → 0AA | 1S | 1 B → 1BB | 0S | 0
Resolução: Como temos duas árvores de análise sintática
diferentes, a gramática é ambígua.
5) Dado a gramática: S → AB | aaB A → a | aA B→b
a. Dê duas derivações mais à esquerda para aab.
→ → → → → → b. Dê as duas árvor es de análise sint ática de (a).
Página | 39
c. Encontr e uma gramática não ambígua para a CFG.
→ → |
Página | 40
Aula 15: PDA 1) Constr ua um PDA para as linguagens abaixo: a. Strings com um número igual de 0’s e 1’s.
b.
| ≥
c.
| á ∗
d.
| ≥ ≥
Página | 41
Aula 16: PDA 1) Construa PDA’s para as linguagens: a.
{ }
b.
|, ≥
c.
|
d.
{ ≤ ≤ }
Página | 42
2) Construa PDA’s determinísticos para: a. Strings binários co m duas vezes mais 1’s que 0’s.
b. Strings binários que começam e terminam com o mesmo símbolo e tem o mesmo número de 0’s e 1’s.
3) Apresente um exemplo de ID para cada PDA dos exercício s 1 e 2. Exercício 1a) String abcccc.
q0,abcccc, ⊢ q0,bcccc,xx ⊢ q1,bcccc,xx ⊢ q1,cccc,xxxx ⊢ q2,cccc,xxxx ⊢ q2,ccc,xxx ⊢ q2,cc,xx ⊢ q2,c,x ⊢ q2,ε, ⊢ q3,ε, Exercício 1b) String 00100.
q0,00100, ⊢ q0,0100,0 ⊢ q0,100,00 ⊢ q1,100,00 ⊢ q1,00,00 ⊢ q2,00,00 ⊢ q2,0,0 ⊢ q2,ε, ⊢ q3,ε,
Página | 43
Exercício 1c) String aabbc.
q0,aabbc, ⊢ q1,aabbc, ⊢ q1,abbc, ⊢ q1,bbc,aa ⊢ q2,bbc,aa ⊢ q2,bc,a ⊢ q2,c, ⊢ q3,c, ⊢ q3,ε, Exercício 1d) String 0 1 00111. q0,00111, ⊢ q0,0111,x ⊢ q0,111,xxx ⊢ q1,11,xx ⊢ q1,1,x ⊢ q1,ε, ⊢ q2,ε, Exercício 2a) String 110.
q0,110, ⊢ q1,10,1 ⊢ q1,0,11 ⊢ q1,0,11 ⊢ q2,ε,1 ⊢ q1,ε, ⊢ q0,ε, Exercício 2b) String 1011.
q0,1011, ⊢ q1,011,1 ⊢ q2,11,0$1 ⊢ q2,1,$1 ⊢ q1,1,1 ⊢ q3,ε,1$1
Página | 44
Aula 17: PDA 1) Responda: a. Em que casos se diz que uma gramática é ambígua?
Uma gramática livre de contexto é considerada ambígua se existe uma string que pode ser gerada pela gramática em mais de um caminho (ou seja, a
cadeia admite mais de uma árvore sintática). b. Em que casos se diz que uma ling uagem é ambígua? Dê um exemplo.
Quando não é possível eliminar a geração de frases ambíguas de uma gramática sem alterar a linguagem. Por exemplo a linguagem
.
c. Há interesse prático em se trabalhar com gramáticas ambíguas?
Não. O compilador usa a árvore de análise sintática para criar a estrutura do programa. Com a gramática ambígua, não sabemos qual será a árvore, podendo chegar em resultados indesejados. 2) Mostre que a linguagem
| > pode ser reconhecida
por um PDA que se move tanto para a direita como para a esquerda (ou por um a PDA com duas pil has).
Página | 45
Aula 18: PDA 1) Dado o PDA M abaixo:
a. Faça a tabela de transiç ão de M.
,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , ,, , b. Apresente todas as computações de abb.
c.
d.
,, ⊢ ,,, ,, ⊢ ,, ⊢ ,, ,, ⊢ ,, ⊢ ,, ⊢ ,, ⊢ ,, ,, ⊢ ,, ⊢ ,, ⊢ ,, ⊢ ,, Mostre que baab ∈ L(M). ,, ⊢ ,, ⊢ ,, ⊢ ,, ⊢ ,, ⊢ ,, Logo, baab ∈ L(M). Mostre que aaa ∉ L(M). ,, ⊢ ,,, Página | 46
,, ⊢ ,, ⊢ ,, ⊢ ,, ,, ⊢ ,, ⊢ ,, ⊢ ,, ⊢ ,, ,, ⊢ ,, ⊢ ,, ⊢ ,, ⊢ ,, Logo, aaa ∉ L(M). 2) Constr uir um PDA correspon dente para a gramática: S → aABB | aAA A → aBB | a B → bBB | A
3) Mostre
que
| > ∪| >
é
determinístico.
4) Prove que
|, ≥ é livr e de cont exto. → | → | → Página | 47
Como podemos escrever essa linguagem com um CFG, então esta linguagem é livre de contexto. 5) Prove que a linguagem
|,, > é
livre de
contexto.
→ 10| → 01|01 Como podemos escrever essa linguagem com um CFG, então esta linguagem é livre de contexto.
Página | 48
Aula 19: Máquina de Turi ng 1) Projete máquinas de Turing para as seguint es lin guagens: a. Conjunt o de strings com um número igual de 0’s e 1’s.
b.
| ≥ .
Página | 49
c.
| é ’ ’.
Página | 50
Aula 20: Máquina de Turi ng 1) Mostre as ID’s da máquina de Turing da linguagem 0n1n, n 1, se a fita de entrada cont ém: a. 00
00 ⊢ 0 ⊢ 0 b. 000111
000111 ⊢ 00111 ⊢ 00111 ⊢ 00111 ⊢ 0011 ⊢ 0011 ⊢ 0011 ⊢ 0011 ⊢ 011 ⊢ 011 ⊢ 011 ⊢ 01 ⊢ 01 ⊢ 01 ⊢ 01 ⊢ 1 ⊢ 1 ⊢ 1 ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ c. 00111
00111 ⊢ 0111 ⊢ 0111 ⊢ 011 ⊢ 011 ⊢ 011 ⊢ 11 ⊢ 11 ⊢ 1 ⊢ 1 ⊢ 1 ⊢ 1 ⊢ 1 2) Considere M a máquina de Turing defin ida por:
B
A
b
C
,, ( ,,
-
-
-
(
-
,, ( ,,
(
,,
(
-
,, ( ,,
(
a. Faça a com put ação da string aabca.
⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ b. Faça a computação da string bcbc.
⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ ⊢ c. Dê o diagrama de transi ção de M.
Página | 51
d. Descr eva o result ado de uma comput ação de M.
Ao realizar a leitura da string para direita, troca b por c. Realizando a leitura para esquerda, troca a por c e c por b. 3) Constr ua uma máquina de Turi ng com alfabeto {a,b} para aceitar cada linguagem a seguir por estado final: a.
| ≥ , ≥
b.
|, >
Página | 52
c.
| ≥
Página | 53
Aula 21: Máquina de Turi ng 1) Construa uma TM que tenha como entrada um número N e adicio ne 1 para este número em bi nário. Para ser pr eciso, a fita inicialmente contém um $ seguido por N em binário. A cabeça está inicialmente lendo o $ no estado q0. Sua TM deverá parar com N+1, em binário, gravado na fita, lendo o símbolo mais à esquerda de N+1, no estado
. Você pode destru ir o $ para criar
N+1, se necessário. a. Dê o diagrama de transição da sua TM e explique o propósito de cada estado.
: ler $ para iniciar a leitura. : encontrar o último valor da fita. : realizar a soma. : volta para o $, estado de partida da fita. : estado final, a fita possui o valor N+1. b. Mostre a sequência de ID's de sua TM para a seguinte entrada: $111.
$111 ⊢ $111 ⊢ $111 ⊢ $111 ⊢ $111 ⊢ $111 ⊢ $110 ⊢ $100 ⊢ $000 ⊢ 15000 ⊢ 1000 2) Construa uma TM sobre o alfabeto {a,b} para realizar as seguintes operações: a. Mover a entrada uma célula para a dir eita.
Página | 54