Git Product home page Git Product logo

vcc's Introduction

Venturini Compiler Compiler

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.

Alt Text

Instação

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:

  1. Abra um arquivo tpp no Sublime;
  2. Nas abas, navege em View->Syntax->Open all with current extension as ...->TPP; e
  3. Novamente nas abas, navege em Preferences->Color Scheme...-> tpp (User).

Se o Sublime não estiver instalado na máquina, ignore estas etapas.

Execução

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.

Flags

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.

Tokens

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:

Árvore de Análise Sintática

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:

Árvore Sintática

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.

Tabela de Símbolos

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:

vcc's People

Contributors

abreudiego94 avatar danielventurini avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

vcc's Issues

Melhora desempenho

Para a melhora do desempenho do compilador o ideal seria realizar Analise Sintática Ascendente.

ERRO NULL Pointer

não está gerando código para chamada recursiva e declaração de variáveis

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.