Code Monkey home page Code Monkey logo

compilador's Introduction

Screenshot

Design of a language called GOL and its respective compiler (synthesis phase) with three-address code generation.

Author: Michelangelo da Rocha Machado.

Project Todo

  • Lexical Analysis
  • Syntax analisys
  • Semantic analysis
  • Intermediate code generation
  • EN translation

Language

Documentation (pt-br only):

GOL Language Documentation

Description of the main operations:

The following operations were derivated from the basic operations found in the Ngraph library to handle Graphs in C++.

graph G1; // var declaration of type graph
graph G2;
graph G3;
int a = 13;

G1 << a; // Insertion of vertex 13 in graph G1
G1 << (a,14); // Insertion of edge (13.14) in graph G1
G2 << 15; // Insertion of vertex 15 in graph G2
a = G3@(13)#; // a receives the input degree of node 13
a = G3#(13)@; // a receives the output degree of node 13
G3 = G1&(13)&; //G3 receives the graph composed by node 13 neighbors in graph G1

Removed operations:

  • G3 = G1 + G2; // G3 receives the union of graphs G1 and G2
  • G2 = G3[(G1)]; // G2 receives subgraph of G3 composed of vertices of G1

Notas:

Os únicos tipos numéricos são: ‘int’ e ‘float’; Não existe sobrecarga de nomes de funções; Em um ‘if’, o ‘else' estará associado com o ‘if’ mais recente; Expressões matemáticas são avaliadas em ordem consistente com aquelas da matemática; O tipo grafo armazena grafos direcionados com repetição de arestas; O tamanho máximo de um identificador é 31 caracteres; As declarações de variáveis devem constar antes dos statements e somente no escopo global ou de uma função; Grafos não podem ser declarados globalmente;

Codigo:

O programa pode gerar a árvore sintática abstrata (AST) nas seguintes formas:

  1. Texto puro **
  2. Codigo .dot que pode ser copiado para algum site (e.g. webgraphviz)
  3. Arquivo .dot que pode ser usado para gerar uma imagem com comando graphviz: dot -Tpng Arvore.dot -o Arvore.png *

* Para utilizar o graphviz, instale-o na sua máquina através do comando: sudo apt install graphviz

** Descontinuado

AST:

AST gerada a partir de código exemplo:

Codigo AST

Geração de código:

O programa gera como saída um arquivo de extensão '.tac' o qual pode ser interpretado através da extração do interpretador TAC, contido no diretório de mesmo nome. O interpretador também pode ser baixado através do repositório do autor: https://github.com/lhsantos/tac.

Código GOL Código gerado (fragmento)

compilador's People

Contributors

michelangelo246 avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

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.