quinta-feira, 25 de outubro de 2007

Compilador AGraphs

Minha monografia tem o objetivo de estudar a aplicabilidade dos AGraphs em sistemas de transformações de grafos. Clique aqui para saber mais sobre os Agraphs.

O projeto AGraphs tem como principal objetivo representar informações (dados). Para representar tais informações, ele se utiliza de grafos. O passo técnico necessário para tal representação é desenvolver um gerador de AGraphs. O gerador já foi desenvolvido com sucesso e tem como objetivo automatizar o processo de criação de um grafo que represente a informação desejada. Falarei melhor sobre o gerador depois, mas vamos ter em mente que ele recebe como entrada um modelo de grafo, em XML, e tem como saída uma biblioteca que possibilita a manipulação de informações presentes no grafo.

Uma das melhores partes do desenvolvimento da minha monografia está sendo a criação de um compilador. Este compilador tem o objetivo de traduzir um texto em outro texto. O texto de entrada é a gramática de um sistema de transformações de grafos enquanto que o texto de saída é o código gerado correspondente a entrada no gerador de AGraphs, isto é, o XML de entrada. Conseguindo cumprir este objetivo da minha monografia, facilitaria, e muito, a utilização dos AGraphs pela comunidade afora :)

Para fazer tal compilador (ou tradutor, na verdade), estou realizando os seguintes passos:

1. Obter exemplos de modelos de grafos no sistema de transformações de grafos que quero representar com os AGraphs.

2. Obtidos esses exemplos, realizar um estudo para obter a gramática do sistema de transformações de grafos.

3. Com a gramática em mãos, o compilador (parser) já pode ser gerado.

3.1 A primeira fase da geração do parser é gerar um analisador léxico. Para isso, utilizei a ferramenta Lex (ou Flex).

3.2 A segunda fase é construir um analisador sintático. Para isso, utilizei a ferramenta Yacc (ou Bison).

3.3 A terceira e última fase, falando simplicadamente, é desenvolver um analisador semântico e a parte responsável pela geração de código.

Nenhum comentário: