Code Monkey home page Code Monkey logo

rinhatopythonvm's Introduction

Rinha Compiler

O Rinha Compiler é um projeto que tem como objetivo converter a linguagem exótica "Rinha" em Bytecode Python VM. É parte de uma competição de compiladores onde os participantes devem criar um interpretador ou compilador que funcione em uma máquina com 2 núcleos e 2GB de RAM.

O desafio central é trabalhar com algo chamado "árvore sintática abstrata" representada no formato JSON. Essa árvore sintática abstrata é gerada pelos organizadores da competição e contém as informações necessárias para interpretar ou compilar o programa.

Estrutura do Código

O projeto é dividido em várias partes essenciais, cada uma com sua função específica. Algumas das partes principais incluem:

  • ast: Contém a definição da árvore sintática abstrata e seus elementos.
  • compiler.py: Implementa a lógica de compilação do Rinha para Bytecode da Python VM.
  • symbol_table.py: Cria e lida com a tabela de símbolos para o compilador.

Detalhes da implementação

Primeiro é feito o parse do json e convertido em objetos de python, mais leves e faceis de trabalhar. Depois é construido a tabela de simbolos e onde se checa se as variaveis existem quando chamadas. Depois é feito a compilação para bytecode de python a partir da arvore sintatica abstrata. Com o bytecode salvamos em um arquivo .pyc e executamos com o python.

Como usar o CLI

O Rinha Compiler (CLI) é uma ferramenta que permite compilar a linguagem exótica "Rinha" em Bytecode Python VM. Abaixo estão as instruções para utilizar o CLI:

Pré-requisitos

Certifique-se de ter o Python 3.x instalado em seu sistema.

Instalação

Não é necessário instalar o Rinha Compiler, pois é um script Python autônomo.

Uso

  1. Clone este repositório e navegue até a raiz em que o modulo rinhac está localizado.

  2. Abra um terminal no diretório mencionado.

  3. Para compilar um arquivo AST Rinha em bytecode Python (.pyc), execute o seguinte comando:

    python -m rinhac [-b] <caminho-para-arquivo-ast> [-o <caminho-de-saida.pyc>]

    [...] = opcional

    Substitua <caminho-para-arquivo-ast> pelo caminho para o arquivo AST Rinha que deseja compilar.

    Se desejar, você pode especificar um caminho de saída personalizado para o arquivo .pyc usando a opção -o.

  4. Para imprimir a árvore sintática abstrata (AST) do arquivo Rinha, execute o seguinte comando:

    python -m rinhac -a <caminho-para-arquivo-ast>

    Substitua <caminho-para-arquivo-ast> pelo caminho para o arquivo AST Rinha que deseja imprimir.

  5. Para imprimir a tabela de símbolos do arquivo Rinha, execute o seguinte comando:

    python -m rinhac -s <caminho-para-arquivo-ast>

    Substitua <caminho-para-arquivo-ast> pelo caminho para o arquivo AST Rinha que deseja usar para imprimir a tabela de símbolos.

  6. Sinta-se à vontade para explorar outras opções e funcionalidades executando python -m rinhac --help.

rinhatopythonvm's People

Contributors

samuelhaidu avatar

Stargazers

 avatar

Watchers

 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.