Compilador em desenvolvimento para a disciplina de Compiladores. Este irá compilar para T++, uma linguagem desenvolvida propriamente para a disciplina, o gcc é melhor.
O VCC está sendo implementado para ser rápido e robusto. Não será usado funções prontas de bibliotecas, por exemplo, Flex. Assim, todas as funções e etapas serão desenvolvidas "não mão" para garantir que não há operações desnecessárias para obter o que precisa. Somente o que deve ser feito será, visando o máximo desempenho. Também a alocação de memória está sendo pensada para se usar o mínimo possível de alocação, tanto dos IDENTIFICADORES quanto das estruturas de dados. O principal motivo para a escolha da linguagem C foi o fato de esta ser muito flexivel quanto a alocação de memória, permitindo um gerenciamento de memória de maneira mais transparente.
Para instalar o vcc:
git clone https://github.com/danielventurini/vcc.git
cd vcc
sudo make install
Use vcc --version
para verificar se o vcc
foi compilado e instalado com sucesso junto com suas dependências.
O software xdot
é instalado junto, pois é usado para exibir a árvore gerada na análise sintática. Porém, o vcc
funcionará normalmente se este não for instalado. Para verificar se o xdot
foi instalado, apenas execute xdot
.
Também na instalação, é copiado os arquivos necessários para o hithlight Syntax
no Sublime Text 3
. As seguintes etapas devem ser realizadas para finalizar a instalação:
- Abra um arquivo
tpp
noSublime
; - Nas abas, navege em
View->Syntax->Open all with current extension as ...->TPP
; e - Novamente nas abas, navege em
Preferences->Color Scheme...-> tpp (User)
.
Se o Sublime
não estiver instalado na máquina, ignore estas etapas.
Compilar arquivos:
vcc [flags] [arquivo1.tpp arquivo2.tpp ...]
Visualizar as opções de saídas da compilação dos arquivos:
vcc -h
As flags desconhecidas são ignoradas e a compilação procede normalmente.
Para cada uma das três primeiras partes da compilação, é possível verificar os resultados por meio de flags, que apresentam as saídas da compilação.
A flag -tk
ou --tokens
apresentam os tokens de cada arquivo de entrada. Para os arquivos de entrada exemplos/teste.tpp
e exemplos/hashtable.tpp
, o vcc
gera a seguinte saída:
Há dois tipos de flags para saída da árvore de análise sintática: --ast-x
e --ast-t
.
A flag -ax
ou --ast-x
gera a saída da árvore de análise sintática. Esta árvore é gerada utilizando o software xdot
, que é instalado junto com o vcc
. Usando esta flag para o arquivo de entrada exemplos/teste.tpp
, o vcc
gera a seguinte saída:
Já a flag -at
ou --ast-t
gera a saída da árvore de anaĺise sintática utilizando o terminal. Este modelo é similar ao útilizado pelo Windows
para printar a árvore de diretórios. Usando a flag para o arquivo de entrada exemplos/hashtable.tpp
, o vcc
gera a seguinte saída no terminal:
Diferente da árvore de análise sintática, a Árvore Sintática é a simplificação da AST. Os nós intermediários que eram usados para análise sintática são removidos, assim, deixando a árvore mais simples e de fácil visualização. Esta não segue um padrão formal para simplificação, apenas foi escolhido os nós que seriam removidos.
Para gerar a saída da árvore sintática, use as flags: --st-x
e --st-t
.
A flag -sx
ou --st-x
gera a saída da árvore sintática. Esta árvore é gerada utilizando o software xdot
, que é instalado junto com o vcc
. Usando esta flag para o mesmo arquivo de entrada, exemplos/teste.tpp
, o vcc
gera a seguinte saída:
Já a flag -st
ou --st-t
gera a saída da árvore sintática utilizando o terminal de maneira semelhante ao da AST.
A tabela de símbolos é a última estrutura gerada pelo vcc
. Para cada escopo encontrado - se, senão, repita, função e o escopo global - é criado uma nova tabela de símbolos para permitir múltiplos níveis de escopo. Ou seja, pode haver um se
dentro de um repita
dentro de um senão
e assim por diante. Para exibir a tabela de símbolos, use a flag -ts
ou --tab-s
. Uasndo esta flag para o mesmo arquivo de entrada, exemplos/test.tpp
o vcc
gera a seguinte saída: