You are on page 1of 8

Converso de AFN em AFD

EXEMPLO 1: Dado AFN que corresponde a expresso regular a* converter em AFD

Inicialmente calculamos a clausura-e ou fechamento-e do estado 1: Fechamento-e({1}) = {1,2,4} Movimento({1,2,4},a) = {3} Movimento({2,3,4},a)={3} Fechamento-e({3}) ={2,3,4} Fechamento-e({3}) ={2,3,4}

EXEMPLO 2: Dado o seguinte AFN converter em AFD

fechamento-e ({1}) = {1,2,6}

Movimento({1,2,6},a) = {3,7} Movimento({3,4,7,8},b) = {5}

Fechamento-e({3,7} = {3,4,7,8} Fechamento-e({5}) ={5,8}

EXEMPLO 3: Considere o AFN construdo para a expresso regular: letra (letra |digito)* converter para AFD

fechamento-e({1})={1} Movimento({1},a) = {2} Fechamento-e({2}) = {2,3,4,5,7,10} Fechamento-e({6})={4,5,6,7,9,10} Fechamento-e({8})={4,5,7,8,9,10} Fechamento-e({6})={4,5,6,7,9,10} Fechamento-e({8})={4,5,7,8,9,10} Fechamento-e({6})={4,5,6,7,9,10} Fechamento-e({8})={4,5,7,8,9,10}

Movimento({2,3,4,5,7,10},letra)={6} Movimento({2,3,4,5,7,10},digito) ={8} Movimento({4,5,6,7,9,10},letra)={6} Movimento({4,5,6,7,9,10},digito)={8} Movimento({4,5,7,8,9,10},letra) ={6} Movimento({4,5,7,8,9,10},digito) = {8}

EXEMPLO 4: Considera o seguinte AFN construdo para a expresso regular: ( a | b)*a

Fechamento({0}) = {0,1,2,4,7} Movimento({0,1,2,4,7},a) ={3,8} Movimento({0,1,2,4,7},b) = {5} Movimento({0,1,2,3,4,6,7,8},a)={3,8} Movimento({0,1,2,3,4,6,7,8},b)={5} Movimento({1,2,4,5,6,7},a) = {3,8} Movimento({1,2,4,5,6,7},b) = {5} Fechamento({3,8})={1,2,3,4,6,7,8} Fechamento({5})={1,2,4,5,6,7} Fechamento({3,8})={1,2,3,4,6,7,8} Fechamento({5})={1,2,4,5,6,7} Fechamento({3,8})={1,2,3,4,6,7,8} Fechamento({5}) ={1,2,4,5,6,7}

2. ANALISADOR SINTATICO A funo de um analisador sinttico determinar a estrutura sinttica de um programa a partir de tokens produzidos pelo analisador lxico e, construir uma arvore de anlise gramatical ou uma arvore sinttica que represente esta estrutura. O esquema abaixo mostra como o analisador sinttico trabalha junto com o analisador lxico.

Envia Program fonte Analisador lxico Solicita novo Analisador sinttico

rvore de derivao

Tabela de Smbolos

As linguagens de programao possuem construes que no podem ser representadas por gramticas regulares, por isto utilizam-se gramticas livres de contexto. De fato, algumas construes no podem ser representadas nem por gramticas livres de contexto, mas estas construes so poucas e o problema facilmente solucionado modificando-se a linguagem.

Um analisador sinttico faz o reconhecimento de sentenas da linguagem, mas caso haja erros (sentena no reconhecida) o analisador deve reportar o erro e se possvel recuperar o seu estado e continuar o reconhecimento. Esta recuperao de estado pode ser bastante difcil, por isto em prottipos de compiladores geralmente no implementado. Gramticas livres de contexto (GLC) Uma gramtica livre de contexto uma especificao para a estrutura sinttica de uma linguagem de programao. Esta especificao muito similar especificao da estrutura lxica de uma linguagem utilizando expresses regulares, com exceo de que uma GLC contem regras de recursividade. Como exemplo de execuo vamos utilizar expresses de aritmtica simples com inteiros e operaes bsicas como soma, subtrao e multiplicao. Estas expresses podem ser dadas pelas seguintes regras exp exp op exp | (exp) | numero op + | - | * Tambm pode ser escrita da seguinte forma exp exp op exp exp (exp) exp numero op + op op * Derivaes e linguagem definida pela gramtica. Derivao o processo atravs da qual as regras de reprodues so aplicadas para formar uma palavra ou verificar se esta pertence linguagem. Smbolos no terminais so substitudos por lado direito da produo correspondente. Uma derivao comea com um nome de estrutura simples e termina com uma cadeia e smbolos de token. Em cada etapa de uma derivao realizada uma substituio utilizando a regra gramatical. Exemplo: A continuao, mostrado um exemplo de derivao para a expresso aritmtica: (34-3)*42, no lado direto aparece as regras utilizadas. (ex. 2) (1) exp exp op exp [ exp exp op exp ] (2) exp op numero [ exp numero ] (3) exp * numero [ op * ] (4) (exp) * numero [ exp (exp) ] (5) (exp op exp) * numero [ exp exp op exp ] (6) (exp op numero) * numero [ exp numero ] (7) (exp - numero) * numero [ op - ] (8) (numero - numero) * numero [ exp numero ]

O conjunto de todas as cadeias de smbolos de tokens obtidos pela derivao de smbolos exp a linguagem definida pela gramtica de expresses. Esta linguagem tem todas as expresses sintaticamente legais. Podemos escrever em forma simblica como: L(G)={s | exp * s } Onde G representa a gramtica de expresses, s representa uma cadeia arbitraria de smbolos de tokens (sentena) e os smbolos representam uma derivao composta de uma seqncia de substituies. O asterisco utilizado para indicar uma seqncia de passos importante notar que se conservam as regras gramaticais em BNF (Backus-Naur Form) para concatenao e seleo, mas no tem um equivalente especifico da operao de repetio para * das expresses regulares. Mas uma operao assim no necessria, j que a repetio pode ser obtida atravs da recurso. Por exemplo, a regra gramatical; A Aa | a ou A aA | a

Geram a linguagem {an | n um enteiro 1}, equivalente a a+ Por exemplo, a cadeia aaaa pode ser gerada pela primeira regra gramatical com a derivao. A Aa Aaa Aaaa aaaa Uma derivao similar funciona para a segunda regra gramatical. A primeira regra gramtica ou seja, A Aa | a, chamada de recursiva pela esquerda enquanto a segunda regra, ou seja, A aA | a, chamada de recursiva pela dereita. Arvores de Anlise Gramatical Uma arvore gramatical uma representao grfica de uma derivao, d uma forma explicita a estrutura que origino a sentena. Dada uma GLC a arvore de derivao obtida da seguinte forma: A raiz da arvore o smbolo inicial Os vrtices interiores so obrigatoriamente no terminais Smbolos terminais e a palavra vazia so as folhas Por exemplo, uma arvore gramatical para a derivao. (ex: 3) exp exp op exp numero op exp numero + exp numero + numero seria:

Se enumerarmos os passos da derivao, podemos associa-os aos nos da arvore. (ex. 4) (1) exp (2) (3) (4) exp op exp numero op exp numero + exp numero + numero

Uma derivao proporciona um mtodo para construir uma cadeia particular de terminais a partir de um no-terminal inicial. Mas as derivaes no representam apenas a estrutura das cadeias que o constroem. Em geral, existem muitas derivaes para a mesma cadeia. Por exemplo, a cadeia acima pode ter outra derivao: (ex. 5) (1) exp exp op exp (2) exp op numero (3) exp + numero (4) numero + numero

Podemos observar que uma arvore de analise gramatical pode corresponder em geral a muitas derivaes, que no conjunto representam a mesma estrutura bsica para a cadeia de terminais analisada gramaticalmente. No entanto podemos diferenciar dois tipos de derivaes particulares: uma derivao pela esquerda e derivao pela direita. Uma derivao pela esquerda, aquela derivao na qual substitudo o no terminal mais para esquerda, como no exemplo (ex. 4), de forma anloga uma derivao pela direita, aquela derivao na qual substitudo o no terminal mais para direita (ex. 5)

Um outro exemplo de derivao pela direita foi mostrado no ex. 2, para a cadeia : (numero - numero) * numero A arvore de derivao correspondente seria:

Usando a derivao pela esquerda podemos gerar a seguinte seqncia de derivao: (1) exp exp op exp (2) (exp) op exp (3) (exp op exp) op exp (4) (numero op exp) op exp (5) (numero - exp) op exp (6) (numero - numero) op exp (7) (numero - numero) * exp (8) (numero - numero) * numero [ exp exp op exp ] [ exp (exp) ] [ exp exp op exp ] [exp numero ] [op - ] [ exp numero ] [ op * ] [ exp numero]

Arvore sinttico abstrato


uma representao mais simplificada da arvore de analise gramatical, por exemplo, a expresso (34-3)*42 pode ser representado como:

Onde os ns representam as operaes e as folhas os nmeros.

You might also like