• Nenhum resultado encontrado

universidade do vale do itajaí - IIS Windows Server

N/A
N/A
Protected

Academic year: 2023

Share "universidade do vale do itajaí - IIS Windows Server"

Copied!
98
0
0

Texto

O código-fonte de um programa, que contém uma coleção de algoritmos que podem ser escritos em qualquer linguagem de programação, gera os resultados esperados quando executado. Linguagem de baixo nível: usa mnemônicos para representar instruções em uma linguagem de máquina, como a linguagem assembly.

Figura 1 - Modelo de compilador.
Figura 1 - Modelo de compilador.

PROBLEMA DE PESQUISA

Solução Proposta

Portanto, o esforço e o tempo de construção de um compilador para uma linguagem de programação podem ser economizados, uma vez que a tarefa de construção do analisador preditivo LL(1) será parcialmente automatizada pela ferramenta para posterior utilização do Java CC.

Delimitação de Escopo

Justificativa

OBJETIVOS

Objetivo Geral

Objetivos Específicos

METODOLOGIA

Metodologia da Pesquisa

Segundo Lakatos e Marconi (2000), o método hipotético-dedutivo defende principalmente a aparência do problema que será testado pela observação e pela experimentação. Pela perspectiva da natureza da pesquisa, pela característica de desenvolvimento de um novo produto, ela é considerada pesquisa aplicada, como afirma Gil (1999, p. 43).

Procedimentos Metodológicos

No objeto de pesquisa deste estudo foi utilizado o método hipotético-dedutivo, pois antes disso houve um estudo das teorias existentes na bibliografia sobre este tema. Foi então considerado o tema da pesquisa, que é o desenvolvimento de uma ferramenta utilizada para solucionar problemas operacionais e melhorar a produtividade.

TEORIA GERAL DAS LINGUAGENS

Linguagens e suas classificações

Segundo Menezes (2008, p. 85), o estudo das linguagens livres de contexto é de extrema importância para a computação, pois especificam adequadamente as estruturas sintáticas das linguagens de programação, como parênteses balanceados, construções aninhadas e outras construções que geralmente são encontrados. em linguagens de programação. Assim, entre os tipos de linguagem definidos pelo linguista Noam Chomsky, as linguagens livres de contexto são as mais importantes em compiladores e linguagens formais, pois especificam efetivamente as construções sintáticas usuais.

Gramática

Hopcroft, Ullman e Motwani (2002) definem a derivação de uma sentença como a substituição de sua parte não terminal por um conjunto de símbolos de acordo com suas regras de produção. Por outro lado, a redução de uma frase é a substituição da parte terminal por uma série de símbolos não terminais que seguem as regras de produção até que o símbolo inicial da gramática possa ser alcançado, reconhecendo assim a frase como pertencente ao linguagem ( RAMOS ; JOSÉ NETO; VEGA, 2009):.

Gramática Livre de Contexto

A representação desses ninhos em um GLC surge de uma propriedade característica de gramáticas deste tipo, chamada de “Propriedade de Auto-incorporação”.

ÁRVORE DE DERIVAÇÃO

Como podem ser geradas duas árvores de inferência, uma inferência mais à esquerda e uma inferência mais à direita para a mesma sentença, diz-se que a GLC é uma gramática ambígua (RAMOS; JOSÉ NETO; VEGA, 2009).

GRAMÁTICAS LIVRE DE CONTEXTO LL(1)

Nesse sentido, nenhuma gramática do tipo LL(1) pode ser uma gramática recursiva à esquerda ou ambígua, e suas produções do tipo A → α | β deve seguir as regras: .. a) α e β não podem derivar cadeias iniciadas pelo mesmo terminal α, qualquer que seja α;. Da mesma forma, se α →* Ɛ, então β não deriva nenhuma cadeia começando com um terminal em FOLLOW(B).

SIMPLIFICAÇÃO E OTIMIZAÇÃO DE GRAMÁTICAS EM GLC

  • Eliminação de símbolos inúteis e inacessíveis
  • Eliminação de Ɛ produções
  • Eliminação de produções simples
  • Eliminação de recursão à esquerda
  • Eliminação do não-determinismo à esquerda

O algoritmo para eliminação de símbolos inúteis e o algoritmo para eliminação de símbolos inacessíveis são apresentados a seguir (RAMOS; JOSÉ NETO; VEGA, 2009, p. 317-318). Segundo Ramos, José Neto e Vega (2009), uma produção da forma A → α em um GLC é uma produção simples se α for não terminal.

NOTAÇÃO EBNF (EXTENDED BACKUS-NAUR FORM)

Ao delimitar, do lado direito, as regras com colchetes, nota-se que a parte fechada pode ser repetida indefinidamente ou deixada de fora; Isso é. Ao lidar com opções de múltipla escolha, quando um elemento deve ser selecionado de um array, eles podem ser colocados entre parênteses e separados pelo operador | (OU). Pode-se observar que gera uma sentença composta por um ou mais símbolos terminais a, enquanto produz uma sentença formada por zero ou mais cd e e, seguidos por um f.

JAVACC

Gerador de Documentação: JavaCC inclui uma ferramenta chamada JJDoc que converte arquivos de gramática em arquivos de documentação com a opção de gerá-los em HTML. Exemplos: JavaCC inclui uma série de exemplos que, juntamente com a documentação relevante, são uma ótima maneira de se familiarizar com a ferramenta. No entanto, pode haver partes da gramática que não são LL(1), portanto a ferramenta fornece recursos de antecipação sintática e semântica para resolver ambigüidades locais nesses pontos.

Tokens especiais: Tokens definidos como símbolos especiais na especificação lexical são ignorados durante a análise, mas estão disponíveis para processamento pela ferramenta. Relatório de erros: o relatório de erros JavaCC está entre os melhores em geradores de analisadores. JavaCC gera analisadores capazes de indicar claramente a localização dos erros de análise com informações completas de diagnóstico.

Figura 6 - Definição dos Tokens.
Figura 6 - Definição dos Tokens.

CONSIDERAÇÕES

Essas ferramentas geralmente usam expressões regulares para especificação lexical e gramáticas livres de contexto para especificação sintática. Neste capítulo serão apresentadas três ferramentas implementadas em trabalhos de conclusão de curso: GALS – Gerador de análises lexicais e sintáticas, Uma ferramenta para auxiliar na especificação semântica de uma linguagem de programação e Uma ferramenta de apoio ao ensino de linguagens livres de contexto.

GALS

UMA FERRAMENTA DE APOIO AO ENSINO DE LINGUAGENS DE

UMA FERRAMENTA PARA AUXÍLIO À ESPECIFICAÇÃO

ANÁLISE COMPARATIVA

CONSIDERAÇÕES

Apresentará uma visão geral do sistema com definições de funcionalidades de software definidas por requisitos funcionais e não funcionais.

VISÃO GERAL DO SISTEMA

O sistema recebe um GLC de entrada descrito na EBNF, que será então encaminhado ao controlador, que irá analisar e realizar as simplificações selecionadas e armazená-las em arquivos separados a cada simplificação. Caso o GLC não possa ser compilado, uma mensagem negativa será enviada ao controlador, que emitirá uma mensagem de erro.

ANÁLISE DE REQUISITOS

Requisitos funcionais

RF08: O sistema deve gerar um arquivo .jj compatível com as definições de geração do analisador preditivo LL(1) para JavaCC. RF09: O sistema deve permitir a geração de um arquivo .esii quando for selecionada a opção de simplificação eliminação de símbolos inúteis e inacessíveis, que representa a gramática após simplificação. RF10: O sistema deve permitir a geração de um arquivo .eep quando for selecionada a opção de simplificar a eliminação das produções Ɛ, representando a gramática após a simplificação.

RF11: O sistema deve permitir a geração de um arquivo .eps quando for selecionada a opção de simplificação de eliminação de produções simples, representando a gramática após simplificação. RF12: O sistema deve permitir a geração de um arquivo .ere quando a opção de simplificação de eliminação de recursão à esquerda for selecionada, representando a gramática após a simplificação. RF13: O sistema deve permitir a geração de um arquivo .ende quando a opção simplificação for selecionada para remover a indeterminação do lado esquerdo, representando a gramática após simplificação.

Requisitos não funcionais

MODELAGEM DO SISTEMA

Diagrama de classe

A Figura 15 apresenta o pacote Control, responsável por manter as referências à EBNF atualmente utilizada, bem como por referenciar as classes de simplificação do GLC. Esta classe terá referências a todas as classes de simplificações e otimizações gramaticais, sendo também responsável por gerar os arquivos de saída de simplificação e tradução no arquivo .jj. Ele está contido no pacote GLC e possui referências à classe Production, que, por sua vez, refere-se à classe Symbol.

A classe EBNF será responsável por descrever tanto o GLC de entrada quanto os GLCs pós-simplificados, com referências à classe de produção, agrupados em um tipo de produção ArrayList, que contém como atributo um Símbolo ArrayList, onde estão todos os símbolos que compõem o GLC. , nomeadamente terminal e não terminal. A Figura 18 identifica o pacote Útil, que inclui duas classes de suporte para métodos de simplificação. Eles são responsáveis ​​por definir a combinação de símbolos a serem analisados ​​dois a dois, e retornar um ArrayList contendo as combinações necessárias para que todos sejam analisados ​​aos pares.

Figura 16 - Diagrama do pacote GLC.
Figura 16 - Diagrama do pacote GLC.

Casos de Uso

O campo EBNF simplificado e/ou otimizado é carregado com o EBNF simplificado e/ou otimizado e um arquivo contendo o EBNF simplificado é salvo para cada simplificação e otimização realizada. O sistema salva um arquivo .jj com o nome selecionado no fluxo principal que contém a tradução EBNF.

DETALHAMENTO DO DESENVOLVIMENTO

Editor, Simplificador e Tradutor de EBNF

A Figura 21 mostra a ferramenta carregada com um GLC descrito na EBNF utilizado no curso de Compiladores ministrado pela UNIVALI e com as opções Eliminação de símbolos inúteis e inacessíveis, Eliminação de produção simples, Eliminação de produções Épsilon, Eliminação de não determinismo no lado esquerdo , Eliminação da recursão à esquerda selecionada. Também são selecionadas as opções de geração de arquivos de simplificação correspondentes a cada simplificação, para que seja criado um arquivo para cada simplificação e salvo na pasta “Conversões” do diretório onde se encontra o executável.

Figura 20 - Modo de execução da ferramenta via prompt de comando.
Figura 20 - Modo de execução da ferramenta via prompt de comando.

Implementação da metalinguagem de entrada EBNF

O caractere “?”, após um conjunto de caracteres delimitados por parênteses, declara que este conjunto de caracteres pode estar presente zero ou uma vez.

Conversão para .JJ

Condições necessárias para conversão ao .JJ

Uma vez habilitado o botão, poderá ser gerado o arquivo .jj, que terá o nome glc.jj e estará localizado na pasta Conversões da pasta onde está localizado o arquivo executável do software.

Testes dos algoritmos de simplificações e otimizações

Elimine a recursão à esquerda” e então, após simplificar, calcule os grupos First e Follow de cada não-terminal presente no GLC, determinando se é ou não um GLC LL(1).

Figura 25 - Execução da eliminação de símbolos inacessíveis e inúteis.
Figura 25 - Execução da eliminação de símbolos inacessíveis e inúteis.

Resultados em um caso real

Uma vez especificado o GLC, as opções para eliminar o não-determinismo à esquerda e eliminar a recursão à esquerda devem ser selecionadas. A Figura 31 mostra um GLC descrito em EBNF carregado no software antes que as simplificações desejadas sejam realizadas. A Figura 32 mostra um GLC descrito em EBNF carregado no software junto com a área de saída após realizar as simplificações desejadas.

Desta forma, a parte sintática está pronta para ser incorporada ao arquivo JavaCC .jj, possibilitando assim ao acadêmico descrever uma GLC em EBNF e realizar as transformações necessárias para criar uma GLC LL(1 ), para convertê-la para a metalinguagem do JavaCC. Utilizando-o, o aluno poderá realizar conversões e simplificações na gramática descrita, que tem sido amplamente pesquisada, possibilitando ao acadêmico realizar transformações como a eliminação de símbolos inúteis e inacessíveis, a eliminação de produções épsilon, a eliminação de símbolos simples produções, a eliminação do determinismo não-esquerdo e a eliminação da recursão à esquerda, a criação de gramáticas intermediárias e possibilitando assim uma análise passo a passo e a validação dos resultados obtidos, o que reduz o tempo gasto para obter uma gramática compatível com os requisitos do JavaCC . Mesmo com a utilização da ferramenta, não se pode garantir que todas as simplificações serão realizadas, pois há alguns casos em que a eliminação do não determinismo à esquerda não é possível e, portanto, não pode ser realizada.

Figura 30 - Aviso de seleção de opção.
Figura 30 - Aviso de seleção de opção.

TRABALHOS FUTUROS

A utilização de ferramentas desenvolvidas para a educação pode permitir uma melhor abordagem e análise do assunto, pois é possível gerar a gramática após cada simplificação, e assim o acadêmico poderá obter passo a passo cada uma das conversões. Espera-se que seja amplamente utilizado nas aulas de Linguagens Formais, no ensino do conteúdo de simplificações e transformações em gramáticas, bem como na disciplina de Compiladores, no desenvolvimento dos analisadores sintáticos propostos. Uma abordagem aos tipos de ferramentas informáticas utilizadas para apoio ao processo de ensino-aprendizagem de matemática, 2012.

Imagem

Figura 1 - Modelo de compilador.
Figura 2 - Árvore gramatical de um comando de atribuição.
Tabela 1 - Modelo de gramática e modelo reconhecedor por tipo de linguagem
Figura 4 - Árvore de derivação mais à direita (a). Árvore de derivação mais à esquerda (b)
+7

Referências

Documentos relacionados

Todo este material, central na perspectiva de Aristóteles, deixa uma marca precária e mar- ginal no desenvolvimento de cada caracter em Teofrasto; só as definições iniciais, com