davis.jp(a)hotmail.com.br
FABIO GINZEL
Fabioginzel(a)gmail.com
MARIO MATIUSSO
mario3001(a)ig.com.br
Santo Andr - SP
2011
Sumrio
1 Introduo......................................................................................................................................................3
1.1 Analisador lxico (ou scanner) .........................................................................................................................................3
1.2 Analisador sinttico (ou parser) ......................................................................................................................................3
1.3 Analisador semntico .......................................................................................................................................................4
1.4 Otimizao de cdigo ........................................................................................................................................................4
1.5 Gerao de cdigo..............................................................................................................................................................4
2 Objetivo..........................................................................................................................................................4
3 Linguagem......................................................................................................................................................5
3.1 Inicio de um programa:.....................................................................................................................................................5
3.2 Variveis:............................................................................................................................................................................5
3.3 Cdigo.................................................................................................................................................................................5
3.4 Equivalncia da Linguagem..............................................................................................................................................5
4 Gramtica.......................................................................................................................................................6
5 Concluses....................................................................................................................................................10
1 Introduo
O objetivo de um compilador traduzir as sequncias de caracteres que representam o programa
fonte em cdigo executvel. Essa tarefa complexa o suficiente de forma que um compilador
pode ser dividido em processos menores interconectados.
1.1
4
1.3
Analisador semntico
O analisador semntico utiliza a rvore sinttica determinada pelo analisador sinttico para:
identificar operadores e operandos das expresses, reconhecer erros semnticos, fazer
verificaes de compatibilidade de tipo, analisar o escopo das variveis, fazer verificaes de
correspondncia entre parmetros atuais e formais.
1.4
Otimizao de cdigo
Gerao de cdigo
2 Objetivo
Este trabalho tem como objetivo detalhar o projeto e construo de um compilador. O compilador
que ser construdo neste trabalho dever realizar o parse da linguagem DFM (descrita no
capitulo 3) para a linguagem JAVA.
A linguagem DFM uma linguagem construda com o objetivo didtico da disciplina de
compiladores.
O compilador construdo no realizar a gerao de cdigo intermedirio nem a otimizao de
cdigo. O programa objeto ser uma classe na liguagem JAVA.
Como ferramenta de apoio para a criao do analisador Lxico e Sinttico foi utilizado o antlr
verso 3.4. Detalhes sobre o antlr so encontrados no link http://www.antlr.org/.
3 Linguagem
Aqui vamos descrever em linhas gerais as caractersticas e estrutura lgica da linguagem DFM:
3.1
Inicio de um programa:
Variveis:
Devero ser feitas todas declaradas no inicio do programa (antes das chaves). No
permitido declarar variveis ao longo do programa. Os tipos reconhecidos so Int, Real,
Char e String.
Todas as variveis so iniciadas com o valor = 0 para real ou inteiro e null no caso de char
e string.
3.3
Equivalncia da Linguagem
leia
escreva
JAVA
public class Resultado {
public static void main(String args[]) {
}
if
else
while
int
floar
string
char
import java.util.Scanner; (No cabealho do arquivo)
Scanner _sscnscanner = new Scanner(System.in);
Integer.parseInt(_sscnscanner.nextLine()); (Caso Inteiro)
Double.parse Double (_sscnscanner.nextLine()); (Caso Real)
_sscnscanner.nextLine().substring(0,1); (Caso Char)
_sscnscanner.nextLine(); (Caso String)
System.out.println
Tabela 1: Equivalncias das linguagens
4 Gramtica
Nesta seo sero mostrados os grafos relativos a gramtica da linguagem DFM.
bloco_cmd AC cmd* FC
8
expr_num termo_num ((SOMA | SUB | DIV | MULT) termo_num)*
Segue o mesmo padro dos anteriores...
ID ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*
INT '0'..'9'+
Segue o mesmo padro...
FLOAT ('0'..'9')+ '.' ('0'..'9')* | '.' ('0'..'9')+ | ('0'..'9')+
9
SUB '-'
Segue o mesmo padro...
MULT '*'
Segue o mesmo padro...
DIV '/'
Segue o mesmo padro...
AP '('
Segue o mesmo padro...
FP ')'
Segue o mesmo padro...
AC '{'
Segue o mesmo padro...
FC '}'
Segue o mesmo padro...
ATRIBUICAO '='
Segue o mesmo padro...
IGUAL '=='
Segue o mesmo padro...
MAIOR '>'
Segue o mesmo padro...
MENOR '<'
Segue o mesmo padro...
FIM_LINHA ';'
Segue o mesmo padro...
10
5 Concluses
Conclumos que construir um compilador da um puta trabalho, mesmo para uma linguagem extremamente
simples como a DFM. Por outro lado o Antlr se mostrou uma ferramenta sensacional. Poupou grande
trabalho no desenvolvimento de cdigo para a anlise lxica e sinttica.
Claro que devido falta de tempo, no construmos nada profissional, porm todos os conceitos aplicados
neste projeto podem ser facilmente entendidos para aplicaes reais. (algum faz a concluso?)