Você está na página 1de 21

CINCIA DA COMPUTAO

PROJETO DE CONCLUSO

Diretrizes para elaborao do Projeto de Concluso do curso de Cincia da Computao

Cuiab, 2012

APRESENTAO

Este trabalho tem como objetivo apresentar o que um compilador, e explicar as fases e o seu funcionamento. Tambm ser apresentado o sistema SAEC (Sistema para auxlio do ensino de compiladores).

ELVIS CAVALCANTE FABIAN

CENTRO UNIVERSITRIO CNDIDO RONDON ELVIS CAVALCANTE FABIAN

SAEC SISTEMA PARA AUXLIO DO ENSINO DE COMPILADORES

Cuiab, 2012

CENTRO UNIVERSITRIO CNDIDO RONDON

ELVIS CAVALCANTE FABIAN

SAEC SISTEMA PARA AUXLIO DO ENSINO DE COMPILADORES

Orientador: Prof. Helder Silveira

Projeto de Concluso de Curso apresentado ao curso de Cincia da Computao do Centro Universitrio Cndido Rondon UNIRONDON, para a obteno do ttulo de bacharel em Cincia da Computao.

Cuiab, 2012

DEDICATRIA

Aos meus familiares, amigos e professores que em momentos de fraqueza se fizeram presentes, sempre me incentivando e acreditando no meu trabalho.

AGRADECIMENTO
Agradeo a todos os que diretamente ou indiretamente tornaram esse sonho possvel.

"Estamos nos anos iniciais de um tempo que se chama dcada digital uma era em que computadores deixaro de ser meramente teis para se tornar uma parte significativa e indispensvel de nossa vida diria. (Bill Gates)

RESUMO
O estudo de compiladores exige um nvel intermedirio de conhecimento terico. Por esse motivo existem algumas ferramentas para auxiliar discentes que no dominam ou autmatos ou expresses regulares, sendo estes conceitos fundamentais para tal estudo. Visando auxiliar toda e qualquer pessoa, no decorrer deste trabalho sero apresentados alguns conceitos bsicos de compiladores. Ainda neste trabalho ser desenvolvido um sistema que possa auxiliar no estudo de compiladores, o sistema denominado SAEC (Sistema para auxlio do ensino de compiladores). Este sistema busca da melhor forma possvel apresentar ao discente as etapas de compilao, bem como o funcionamento de cada etapa. Seu principal foco a anlise lxica e a anlise sinttica. Palavras-chave: Compilador, Ferramentas de auxilio, anlise Lxica e Sinttica.

ABSTRACT
The study of compilers requires an intermediate level of theoretical knowledge. For this reason there are some tools to help students who are not fluent or automata or regular expressions, which are key concepts for this study. Aiming to assist any person, in this paper we introduce some basic concepts of compilers. Although this work will be developed a system that can aid in the study of compilers, the system is termed SAEC (System to aid the teaching of compilers). This system seeks the best possible way to present to students the steps of compiling, and running each step. Its main focus is on lexical analysis and parsing. Keywords: compiler, tools help, lexical and syntactic analysis.

Sumrio
SUMRIO......................................................................................................10

11

LISTA DE ABREVIATURAS E SIGLAS

- SAEC Sistema para auxlio do ensino de compiladores.

12

1. INTRODUO 1.1 Apresentao Para melhorar a qualidade de desenvolvimento e estudo de compiladores, a compilao foi dividida em vrias fases. Onde cada fase possui uma determinada funo, no decorrer deste trabalho ser apresentado cada fase. Todas as fases so primordiais para compilador um cdigo fonte corretamente. Fazer estas anlises requer muita ateno e conhecimento, sendo assim, faze-la sem uma ferramenta de auxlio pode se tornar desgastante e sem a certeza que ir funcionar. Primeiramente ser apresentado o que compilador e uma breve explicao de cada fase. Aps ser apresenta o sistema SAEC, desenvolvido no decorrer deste trabalho para auxiliar qualquer pessoa que se intersse pelo tema compiladores. O SAEC no tem como objetivo substituir as ferramentas j existentes. O objetivo do SAEC apenas agregar valor didtico, auxiliando tanto docentes quanto discentes de compilador. Sero abordados os seguintes temas: 1. O que compilador. 2. Analisador Lxico. 3. Analisador Sinttico. 4. Analisador Semntico.

1.2 Justificativa Na grade curricular do curso de cincias da computao existe uma matria chamada compiladores, durante o estudo da mesma, notou-se que havia falta de uma ferramenta que auxiliasse no estudo da mesma. Apesar de existir ferramenta com propsito semelhante, a usabilidade do mesmo no to agradvel a estudantes que esto tendo o primeiro contato com compiladores. Por esse motivo ser desenvolvido o SAEC que busca ser o mais simples possvel, tendo uma fcil interao com o usurio.

13

1.3 Objetivos 1.3.1 Objetivos Gerais. Desenvolver uma ferramenta que faa tanto anlise lxica quanto sinttica e que auxilie e incentive qualquer pessoa, com qualquer nvel de conhecimento, a estudar compilador.

1.3.2 Objetivos Especficos Apresentar as fases de compilao. Desenvolver um ambiente de testes e demonstrar o funcionamento tanto de cada fase separadamente quanto da juno das fases implementadas.

14

1.4 Metodologia 1.4.1 Tipo de Pesquisa Esta pesquisa foi desenvolvida utilizando a pesquisa exploratria de campo e a pesquisa bibliografica. Principalmente monografias passadas. 1.4.2 Universo da Pesquisa Fontes coletadas via WEB, pesquisa em livros e principalmente na conversa com professores da rea. 1.4.3 Instrumentos da Pesquisa Como instrumentos de pesquisa e coleta de dados, foram escolhidos a observao, anlise de documentos, questionamentos durante as entrevistas. Os mesmos so sugeridos em Gil (1996) e permitem uma abordagem qualitativa dos dados coletados.

15

2 FUNDAMENTAO TERICA 2.1 Compilador Segundo Freitas compilador um programa que l um programa escrito em uma linguagem (fonte) e o traduz para outra linguagem (destino), reportando erros quando ele ocorre. Antes que se possa rodar um programa, o mesmo deve ser traduzido para um formato que lhe permite ser executado, o sistema de software que faz est traduo o compilador. Esse processo to complexo que no razovel, do ponto de vista lgico e de implementao, desenvolve-lo em um nico passo. Por essa razo o processo de compilao foi dividido em sub processos, chamados de fases, como podemos ver na figura 1. Uma fase uma operao que toma como entrada uma representao e produz como sada outra representao.

Figura 1. Estrutura do compilador

16

2.2 Anlise Lxica a primeira fase de trs do processo de compilao de um cdigo fonte. O analisador lxico tem como funo ler o cdigo fonte caractere a caractere identificando e classificando cada palavra, de acordo com as regras estabelecidas. Essas palavras, tambm chamadas de lexemas, so armazenadas em uma tabela devidamente classificada. Essas classificaes so chamadas de tokens. O analisador lxico ainda possui algumas funes secundrias como, por exemplo: Contar quantidade de linhas. Remover comentrios. Contar a quantidade de caracteres. Tratar espaos. A nica possibilidade de ocorrer erro aparecer um caractere que no pertence ao alfabeto da linguagem. Na ocorrncia de erros o analisador pode parar ou entrar em loop infinito. A modalidade de pnico pode ser usada para recuperar erros lxicos ignorando os caracteres invlidos at encontrar algum que pertena ao alfabeto ou o fim do arquivo. Outras formas de recuperao de erros lxicos so: Remover caracteres invlidos. Inserir caracteres que faltam. Substituir caracteres incorretos por corretos. Trocar dois caracteres adjacentes. A sada do analisador lxico uma sequncia de smbolos que passada para a prxima fase, o analisador sinttico. Do ponto de vista da implementao do compilador, o analisador lxico atua como uma interface entre o texto fonte e o analisador sinttico.

17

2.3 Anlise Sinttica o processo de analisar uma sequncia de entrada para determinar sua estrutura gramatical segundo uma determinada gramtica formal. o responsvel por verificar se os smbolos contidos no programa fonte formam um programa vlido, ou no. Toda linguagem de programao possui regras que descrevem sua estrutura sinttica. A sintaxe pode ser descrita pro uma gramtica livre de contexto ou pela notao BNF. O uso da gramtica traz vantagens pelas seguintes razes: Precisa. Pode-se automatizar o processo de construo do analisador lxico e o gerador automtico pode revelar ambiguidades sintticas. Facilita a compilao e a deteco de erros. Facilidade de incorporar novas construes. O analisador sinttico tenta construir um ADS (rvore de derivao sinttica), se o analisador conseguir criar uma ADS a sentena est sintaticamente correta, caso contrrio est sintaticamente errada. De acordo com AHO, o analisador sinttico pode ser classificado em dois grupos: 1. Descendente: Tenta construir a ADS a partir do smbolo inicial S (raiz), aplicando regras de produo at produzir todos os smbolos (folhas). 1.1. Com Backup: Usando tentativa e erro, tenta derivar uma sentena esgotando todas as possveis opes de derivao. O retorno para os pontos com outras possibilidades de derivao feito ate que se tenha analisado a sentena inteira, ou at que seja encontrada uma folha que no seja reconhecida depois de esgotarem-se todas as regras de produo. O registro de que regra de produo foi adotada e que poro de sentena j foi lida, so mantidas em uma estrutura tipo pilha para facilitar o mecanismo de tentativa e erro. Esse mtodo no mais usado na construo de compiladores, pois gasta muita memria, alm de ser demorado. 1.2. Recursivo: Este o mtodo mais indicado, pois aproveita a estrutura da gramtica de forma completa. escrito na forma de um conjunto de procedimentos, sendo associado a cada procedimento um elemento no terminal da gramtica. Por exemplo, dada a gramtica: <expr> ::= <termo>+<expr>|<termo> <termo > ::= <fator>*<termo|><fator> <fator> ::= <primario>**<fator>|<primario> <primario> ::= IDENT|NUMERO|(<expr>)

18

Podemos reescreva-la na forma abaixo: <expr> ::= <termo> {+ <expr>}* <termo> ::= <fator> {* <termo>}* <fator> ::= <primario>{**<fator>}* <primario> ::= IDENT|NUMERO|(<expr>) Podemos interpretar a primeira regra como: expresso um termo seguido de zero ou mais expresses conectadas pelo operados +. 2. Ascendente: Tenta construir a ADS a partir dos smbolos (folhas), fazendo redues (substituir o lado direito de uma regra pelo seu lado esquerdo) at obter o smbolo inicial (raiz) 2.3.1 Problema da recursividade Para que se possa construir um analisador sinttico descendente recursivo, uma gramtica no pode ter regras recursivas esquerda. Uma gramtica recursiva esquerda se tem produes da forma: U ::= U ou U => + U Podemos resolver o problema da recursividade com uma transformao. Regras do tipo: A ::= A | Cujo objetivo produzir cadeias da forma: , , , ... devem ser transformadas em: A ::= A A ::= A| &

19

2.4 Anlise Semntica De acordo com Schneider as anlises lxica e sinttica no esto preocupadas com o significado ou semntica dos programas que eles processam. O papel do analisador semntico prover mtodos pelos quais as estruturas construdas pelo analisador sinttico possam ser avaliadas ou executadas. As gramticas livres de contexto no so poderosas suficientes para descrever uma srie de construes das linguagens de programao, como por exemplo, regras de escopo, regras de visibilidade e consistncia de tipos. papel do analisador semntico assegurar que todas as regras sensveis ao contexto da linguagem estejam analisadas e verificadas. Um compilador usa uma tabela de smbolos (TS) para guardar informaes sobre os nomes declarados em um programa. A TS pesquisada cada vez que um nome encontrado no programa fonte. Alteraes so feitas na TS sempre que um novo nome ou nova informao obtido. Cada entrada na TS a declarao de um nome. O formato das entradas pode no ser uniforme, porque as informaes armazenadas para cada nome pode variar de acordo com o tipo/uso do nome. Informaes sobre que endereos de memria sero associados aos nomes (variveis) devem ser guardada na TS.

20

3. CONSIDERAES FINAIS Este trabalho produziu uma ferramenta chamada SAEC que auxilia o estudo de compiladores, com ele possvel aprender de forma clara quais as funes de cada fase no processo de compilao.

21

4. Referncias Bibliogrficas AHO, Alfred V; SETHI, Ravi; ULLMAN, Jeffrey D. Compiladores, Princpios, Tcnicas e Ferramentas. Rio de Janeiro LTC 1986, GESSES, Carlos Eduardo, GALS, Gerador de Analisadores Lxicos e Sintticos, Florianpolis, 2003. VIEIRA, Vania, Anlise Lxica, Salvador 2010. JR, Bertoldo Schneider, Resumo sobre o conceito de Compilao, Paran. ARAJO, Eduardo Belo de, Analisador ANSI-C, Minas Gerais, 2005. REVELO, Michel Nogueira, Desenvolvimento de um prottipo de um gerador de analisar lxico, Blumenau, 2002. J., M. Cueva Lovelle, Conceptos bsicos de Procesadores de Lenguaje, Oviedo Espanha, 1998. LOPES, Cludio, LEONEL Gildo, ROSSINE Srgio. Implementao de um analisador lxico: a primeira etapa na construo do compilador Marvel. NASCIMENTO, Ricardo Mendes do. Implementao do Analisador Lxico, Santo ngelo RS, 2007. FREITAS, Ricardo Lus de, Compiladores CRENSHAW, Jack W. Vamos Construir um compilador! Disponvel em <http://compiladores.osdevbrasil.net/>. Acesso em 15/05/2012.

Você também pode gostar