Você está na página 1de 17

UNIVERSIDADE TECNOLGICA FEDERAL DO PARAN DEPARTAMENTO ACADMICO DE INFORMTICA BACHARELADO EM CINCIA DA COMPUTAO

JOO ANTNIO CARVALHO MONTEIRO DE OLIVEIRA LUCAS FERNANDO SOUZA DE CASTRO

TRABALHO PRTICO INTEGRADOR SIMULAO DE AUTMATOS: IMPLEMENTAO E COMPLEXIDADE

RELATRIO

PONTA GROSSA 2012

2 JOO ANTNIO CARVALHO MONTEIRO DE OLIVEIRA LUCAS FERNANDO SOUZA DE CASTRO

TRABALHO PRTICO INTEGRADOR SIMULAO DE AUTMATOS: IMPLEMENTAO E COMPLEXIDADE

Relatrio entregue referente ao trabalho prtico integrador das disciplinas de Compiladores e Anlise de Algortmos, do curso de Bacharelado em Cincia da Computao, oferecidos pela Universidade Tecnolgica Federal do Paran. Prof. Gleifer Vaz Alves Prof. Saulo Jorge Beltrao de Queiroz

PONTA GROSSA 2012

SUMRIO
1 2 INTRODUO .............................................................................................................. 4 COMPILADORES ......................................................................................................... 5 2.1 DEFINIO ............................................................................................................ 5 2.1.1 DEFINIO INTERNA DO AUTMATO ............................................................. 6 2.2.1 MATRIZ DE TRANSIES ................................................................................. 6 2.2.2 CLASSES UTILIZDAS......................................................................................... 6 2.3 FUNO FECHO (CLOSURE) .............................................................................. 8 2.3.1 DEFINIAO DA FUNO CLOSURE ................................................................. 8 2.3.2 IMPLEMENTAO DA FUNO CLOSURE...................................................... 8 2.2.3 PARTE CENTRAL DA FUNO CLOSURE ....................................................... 9 2.4 FUNO MOVE ................................................................................................... 10 2.4.1 DEFINIAO DA FUNO MOVE...................................................................... 10 2.4.2 IMPLEMENTAO DA FUNO MOVE .......................................................... 10 2.5 FINALIZAO DO ALGORITMO.......................................................................... 12 2.6 INTERFACE COM O USURIO ........................................................................... 12 3 ANLISE DE ALGORTMOS ...................................................................................... 14 3.1.1 TESTES EMPRICOS ....................................................................................... 14 3.1.2 TESTES EMPRICOS COM NOVOS ESTADOS .............................................. 15 3.1.3 TESTES ANALTICOS ...................................................................................... 16 3.2 COMPLEXIDADE DO FEIXO ............................................................................... 16 3.2 COMPLEXIDADE DO MOVE ............................................................................... 16 4 REFERNCIAS ........................................................................................................... 17

INTRODUO
A partir da realizao deste trabalho pode-se aprender e desenvolver muito sobre

disciplinas de grande importncia para o curso de cincia da computao, compiladores e anlise de algortmos. Alm de aprimorar os conhecimentos previamente adquiridos acerca das matrias citadas. Na etapa inicial do projeto optou-se pela escolha da linguagem de programao java para a implementao dos algortmos internos ao programa. O projeto possui duas etapas, uma inicial de pesquisa, onde se deve pesquisar um autmato ANFD, isto , que possua transies vazias. Neste autmato deve-se aplicar funes advindas da anlise lxica na compilao. A partir da definio das funes necessrias, que so move e fecho inicia-se a segunda etapa do trabalho, esta j se tratando de anlise de algortmos, onde deve-se observar as funes implementadas citadas anteriormente e apresentar uma anlise referente a cada uma das etapas, alm de apresentar um grfico de cada uma das anlise no tocante a testes empricos definidos pela equipe.

2
2.1

COMPILADORES
DEFINIO O grupo deve inicialmente escolher um altmato AFND que apresente bastante

transies vazias. Definiu-se ento que o autmato seria conforme a figura abaixo:

Figura 1 - Autmato AFND Conforme ilustra a figura 1, o autmato escolhido o seguinte: aceita uma sequencia de a e b indefinida ou um ( seguido por uma sequencia de a e b tanto em rdem quanto em quantidades indefinidas para cada repetio de a e b. Ainda deve representar o smbolo com ) caso o smbolo ( seja lido. Segue abaixo a gramtica G1 para o automoato: S A ( A ) A | A | PalavraVazia A aA | bA | PalavraVazia PalavraVazia e A partir da definio de G1, obtm-se a concluso da primeira etapa do projeto. Inicia-se ento a parte de implementao do autmato G1.

6 2.1.1 DEFINIO INTERNA DO AUTMATO A representao adotada pelo grupo a seguinte: 1 Ser criada a classe Estados, que tem como funo simbolizar cada estado do autmato, como q0, q1, q2. 2 Ser realizadas as transies entre os estados. 4 Ser criada a matriz de transio, esta tem a funo de representar cada transio possvel entre os estados do autmato. 5 Ser definida a classe Atomato, que tem por finalidade receber os estados, e nessa classe sero implementados os algortmos de compilao.

2.2.1 MATRIZ DE TRANSIES A partir da definio do item 1.2 as classes principais foram definidas e implementadas. A matriz de transio foi definida da seguinte forma: ndice Letra q2 (estado inicial) q3 0 a q0 1 B q0 2 palVazia q3 q5 3 ( 4 ) -

Tabela 1: Matriz de Transies Conforme mostra a tabela 1 a matriz de transies parte fundamental para o andamento do algortmo como um todo. Um ponto importante que a matriz implementada apresenta alm dos que j foi mostrado, um terceiro eixo, onde cada posio da matrz de fato uma lista encadeada de estados. Devido a isto um mesmo smbolo pode ser encontrado em em mais que um estado a partir de um estado qx.

2.2.2 CLASSES UTILIZDAS Para a implementao em java, utilizou-se do padro MVC (Model-View-Control). Dessa maneira a definio dos estruturas bsicas feita no pacote model, as interfaces com o usurio no pacote view, e finalmente as alteraes e adaptaes ao autmato so definidas no pacote control.

7 O detalhe interessante que tanto a criao, quanto os vereditos so alcanados mediante as classes do pacote control. Uma vez que este a alma do algortmo. Classe Core Pacote com.lj.control Descrio Classe que implementa as funes fecho e move, alm de retornar se a entrrada de dados foi ou no aceita InicializacaoAutomato com.lj.control Classe que cria a estrutura do automato, cria os estados alm das transies entre os estados AcaoMenu com.lj.control.acoes Classe que recebe o evento do clique do mouse e dispara a avaliao da expresso Alfabeto com.lj.model Classe que contm os smbolos reconhecidos pela gramtica G1 Automato com.lj.model Classe que contem a estrutura do autmato Estado com.lj.model Classe que simula cada estado do autmato Principal com.lj.view Classe que gera a tela, e por meio dela feita a entrada de dados Tabela 2 Classes desenvolvidas no algortmo

8 2.3 FUNO FECHO (CLOSURE)

2.3.1 DEFINIAO DA FUNO CLOSURE Closure(s) significa o conjunto de estados do AFND que podem ser alcanados a partir do estado s do AFND apenas sob transies vazias.

2.3.2 IMPLEMENTAO DA FUNO CLOSURE Conforme definido na especificao no item 2.1 a funo e-closure pode ser definida pelo seguinte algortmo:

Figura 2 - Funo e-Closure A partir deste algortmo de modelo, exibido no figura 2. Deve-se desenvolver a prpria funo e-closure.

Figura 3 - Funo Fecho O algortmo acima possui os seguintes smbolos importntes: lista: conjunto inicial de estados. lvisit: conjunto de estados acessados lprox: conjunto de estados que aguardam para serem visitados. A partir desta definio o funo do algortmo pode ser definida simplesmente pela frase: Tendo o conjunto X de estados selecionado, retorne um conjunto Y contendo os estados acessados lendo apenas palavras Vazias a partir de cada estado de X.

2.2.3 PARTE CENTRAL DA FUNO CLOSURE Detalhe para o funcionamento do algortmo, basicamente o uso de duas estruturas de repetio aninhados.

10

Figura 4 - Estrutura central do fecho O primeiro lao for tem a funo de percorrer toda a lista que passada para o algortmo do fecho. Conforme a abstrao acima, deve-se imaginar que este lao percorre os elementos da estrutura X. O segundo lao for tem como funo de percorrer na matriz de transies, sendo que um detalhe importnte estado][indice da palavra vazia]. Em seguida feita a comparao se a lista dos estados a serem visitados contem o estado selecionado e se este estado ainda no foi visitado. Caso seja satisfeita essa condio, o estado selecionadao adicionado a lista dos prximos estados a serem visitados. que o indice acessado da matriz [posio do

2.4

FUNO MOVE

2.4.1 DEFINIAO DA FUNO MOVE Conjunto de estados do AFND para os quais existe uma transio sob o smbolo de entrada a a partir de algum estado s em T. 2.4.2 IMPLEMENTAO DA FUNO MOVE

11

Figura 5 - Funo Move Conforme ilustra a figura 5, a funo move baseada na ideia de busca de um smbolo dentro da lista X, que passada para a funo. Segue abaixo a definio do cdigo: 1 - Inicializa-se uma lista de estados 2 busca-se o ndice da letra de entrada na matriz. 3 realiza-se um lao de repetio por toda lista X. 4 conferido se o ndice selecionado vlido. 5 observado se o elemento selecionado possui a transio no est vazia. 6 inicia uma nova estrutura de repetio 7 adiciona a lista de estados (criada no passo 1) o elemento selecionado, caso ele represente a transio com o caractr desejado.

12 2.5 FINALIZAO DO ALGORITMO Conforme os algortmos anteriores foram desenvolvidos corretamente, a etapa final a juno dos algortmos. Definiu-se a entrada de dados para a realizao dos testes seria realizada mediante um componente do tipo jTextField. Que consiste num campo onde ser digitada a entrada. A seguinte expresso faz a avaliao da expresso de entrada. 2.6 INTERFACE COM O USURIO Segue abaixo a figura do program em execuo:

Figura 6 - Execuo do Programa

13

Figura 7 - Funo de Teste da Expresso de Entrada

Conforme exemplifica a figura 6 a avaliao representada a partir dos clculos das funes fecho e move. Caso o conjunto s no possua o estado final, a palavra no pode ser aceita. Caso possua ela ser aceita.

14

ANLISE DE ALGORTMOS
definida na especifio do trabalho que deve-se realizar testes com algortmo, a

fim de extrar o informaes referentes ao atutmato. 3.1.1 TESTES EMPRICOS Devem-se realizar testes empricos de desempenho com a implementao definida na etapa de compiladores e implementada.

Grfico 1 - Custos do algortmo em relao cadeia de entrada

15

3.1.2 TESTES EMPRICOS COM NOVOS ESTADOS

800 700 600 500 400 300 200 100 0 5 10 15 20 30 50 80 18 100 20 700-800 600-700 500-600 400-500 300-400 200-300 100-200 0-100

16 3.1.3 TESTES ANALTICOS 3.2 COMPLEXIDADE DO FEIXO A complexidade do feixo segue abaixo: Considerando V = nmero de vrtices A = nmero de arestas K = constante A complexidade do clculo do fecho o seguintte: O((V+A)K)

3.2

COMPLEXIDADE DO MOVE Segue abaixo o pseudocdigo da funo move:


for ( int i = 0; i < tamanho_lista; i++) { if (indice >=0) { if (matriz[][i] no est vazia) { for (int j = estado_interno; j < numCharDoAlfabeto;j++){ smove.add(x); } } } }

Considerando V = nmero de vrtices Q = nmero de caractres aceitos pela gramtica A = nmero de arestas K = constante A complexidade do clculo move o seguintte: O((VQ+A)K)

17

4
Aulas

REFERNCIAS
de compiladores, Anlise Lxica, Aula 02. Disponvel em:

http://moodle.pg.utfpr.edu.br/mod/resource/view.php?id=13528 <acesado em 26/10/2012>

Você também pode gostar