Lista de Exercícios
Definição de gramáticas e Autômatos Finitos Determinísticos
Uma das formas de se especificar a gramática de uma linguagem de programação é utilizar a Backus-Naur Form (BNF – Ingerman 1962). Nela, símbolos não terminais (variáveis) são defini-das por rótulos entre “<>” e o sinal que indica as possíveis produções de um símbolo é o “::=”. Para simplificar a representação das gramáticas, há a forma estendida da BNF, a EBNF (Whitney 1969). Seu uso permite a inclusão de operadores de opcionalidade, o “[ ]” e de repetição, o operador “{ }”.
1. Seja a EBNF abaixo que expressa a linguagem de uma calculadora binária. <expressao> ::= <numero> [<operador> <expressao>]
<operador> ::= +| − | × |÷ <numero> ::= [−]{<digito>} <digito> ::= 0 | 1
(a) Represente essa gramática em sua forma clássica (utilizando apenas letras maiúsculas para símbolos não terminais, “→” para indicar a produção e | como “ou”).
(b) Construa o grafo da função de transição de um autômato finito determinístico que a reco-nhece.
(c) Apresente este autômato.
Solução: Uma possível representação desta gramática em sua forma clássica é:
G =< {S,N,O,D}, Σ,δ,S>, com Σ = {0,1} e δ : S → N | NOS O → + | − | × | ÷ N → D | −D D → DD | 0 | 1
A função de transição de um autômato para esta gramática é
e o autômato seria A =< {q0, q1, q2, q3}, Σ,δ,q0, {q1} >, com Σ = {0,1,+,−,×,÷} δ = 0..9 + − × ÷ q0 q1 q2 q1 q1 q3 q3 q3 q3 q2 q1 q3 q1 q2
2. Estenda a EBNF da questão 1 para uma calculadora decimal e efetue os mesmos procedimentos solicitados.
Solução: Uma possível EBNF para a calculadora decimal é:
<expressao> ::= <numero> [<operador> <expressao>] <operador> ::= +| − | × |÷
<numero> ::= [−]{<digito>}
<digito> ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0.
Uma possível representação desta gramática em sua forma clássica é: G =< {S,N,O,D}, Σ,δ,S>, com Σ = {1,2,3,4,5,6,7,8,9,0} e δ : S → N | NOS O → + | − | × | ÷ N → D | −D D → DD | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0
A função de transição de um autômato para esta gramática é
e o autômato seria A =< {q0, q1, q2, q3}, Σ,δ,q0, {q1} >, com Σ = {1,2,3,4,5,6,7,8,9,0,+,−,×,÷} δ = 0..9 + − × ÷ q0 q1 q2 q1 q1 q3 q3 q3 q3 q2 q1 q3 q1 q2
3. Sejam os possíveis conjuntos de regras de produção para a gramática G especificada abaixo. G =< {S,P},{a,b},δ,S> δ1: S → aSa | aPa P → PP | b δ2: S → aSa | aPa P → PP | Pb | bP | b δ3: S → aSa | aPa | aQa P → PP | Pb | bP | b Q → b
(a) Como é a linguagem gerada por cada uma das gramáticas G1, G2e G3que compartilham a
estrutura da gramática G diferindo apenas no conjunto de regras de produção (δ1, δ1e δ3,
respectivamente)?
(b) Qual dos conjuntos de regras de produção possui melhor estruturação de suas regras? (c) Qual o formalismo mais simples capaz de reconhecer essas gramáticas?
(d) Especifique o formalismo do ítem anterior.
Solução: Os três conjuntos de regras de produção especificam a mesma linguagem: a
lin-guagem que contém os caracteres “a” e “b” compondo uma cadeia balanceada de “a”s (ao menos um de cada lado)com uma sequência de “b”s entre as de “a” (ao menos um “b”). Ex.: aba, aabaa, aaabaaa, aabbbbbbaa, abba.
O conjunto δ1apresenta a menor quantidade possível de regras para especificar esta
lingua-gem, sendo, portanto, G1a gramática mínima para esta linguagem. Nas gramáticas G2e G3
Nessa linguagem há a necessidade de se balancear a quantidade de “a”s no começo e no fim da cadeia. O formalismo mais simples capaz de propiciar este balanceamento é o autômato de pilha. Um possível autômato para esta linguagem é:
A =< {q1, q2, q3}, {a,b}, {A,Z}, δ, q0, Z, q3>, com δ especificado pelo grafo do autômato abaixo.
q1 q0 b,A,A q2 b,A,A a,A,λ a,Z,AZ a,A,AA a,A,λ ǫ,Z,λ
4. Proponha uma gramática para a linguagem H que representa as horas (formato 24h) e construa o autômato finito determinístico que a reconhece.
Solução: Uma possível gramática H seria:
H =< {S,H,L,M}, Σ,δ,S>, com Σ = {0,1,2,3,4,5,6,7,8,9,0,:} δ : S → 0H:MH | 1H:MH | 2L:MH L → 0 | 1 | 2 | 3 M → L | 4 | 5 H → L | M | 6 | 7 | 8 | 9
e um autômato finito determinístico que a reconheça é:
A =< {q0, q1, q2, q3, q4, q5, q6}, Σ,δ,q0, {q6} >, com Σ = {1,2,3,4,5,6,7,8,9,0,:} δ = 0..1 2 3 4..5 6..9 : q0 q2 q1 q1 q3 q3 q3 q2 q3 q3 q3 q3 q3 q3 q4 q4 q5 q5 q5 q5 q5 q6 q6 q6 q6 q6
q1 q0 q2 a a a,b a,b,c c,d
(a) Qual a linguagem reconhecida por esse autômato?
(b) Apresente o grafo de um autômato finito determinístico correspondente a este.
Solução: A linguagem reconhecida pelo autômato é uma sequência de tamanho mínimo um
de: sequências de “a”s e “b”s (em qualquer ordem) de qualquer tamanho finalizadas por “a”, “b” ou “c” seguido de “c” ou “d” finalizando por um “a”.
Para se converter o autômato finito não determinístico em um autômato finito não deter-minístico, um dos métodos que podem ser utilizados é a construção da tabela de regras de produção, na seguinte forma.
Passo 1
Montar a tabela com as regras de produção do autômato finito determinístico.
δ = a b c d q0 {q0, q1} {q0, q1} q1 q1 q2 q2 q2 {q0, q1} Passo 2
Modificar a tabela de forma que os casos de não determinismos gerem, cada um deles, um novo estado. Caso as transições dos novos estados gerem não-determinismos novos, cada um deles vai gerar também um novo estado.
δN D= a b c d q0 {q0, q1} {q0, q1} q1 q1 q2 q2 q2 {q0, q1} {q0, q1} {q0, q1} {q0, q1} {q1, q2} q2 {q1, q2} {q0, q1} q2 q2 Passo 3
Cada caso onde se atingisse um estado final faz com que o novo estado seja também estado final. Assim, o autômato finito determinístico correspondente será:
AN D =<{q0, q1, q2, {q0, q1}, {q1, q2}}, {a,b,c,d}, δN D, q0, {q1, {q0, q1}, {q1, q2}} >. Seu grafo pode
ser observado na figura abaixo.
Referências
Ingerman, P. Z. (1962), ‘General language translation schemata’, Communications of the ACM
5(6), 356.