Escolar Documentos
Profissional Documentos
Cultura Documentos
RELATRIO
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
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
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:
13
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.
15
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
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: