- Trabalho desenvolvido em grupo durante a disciplina de Linguagens e Paradigmas de Programação (curso de Ciência da Computação da Universidade Federal de Goiás - UFG)
- O programa consiste em um interpretador da linguagem orientada a objeto BOL (Bruno's Object-Oriented Language)
- Linguagem utilizada para a implementação do interpretador: Lua 5.4
- Luiz Fernando de Freitas Oliveira (luizfernandofo)
- Pedro Augusto Serafim Belo (PedroASB)
- Ryan Fernandes Auder Lopes (ryan-fauder)
Faça um clone do repositório em sua máquina e entre na pasta src
do projeto:
git clone https://github.com/PedroASB/BOL-Interpreter.git && cd ./BOL-Interpreter/src/
Em seguida, execute o comando abaixo para executar um exemplo de código em BOL:
lua interpreter.lua ../examples/program1.bol
Na pasta examples
, estão disponíveis 4 (quatro) exemplos de códigos para teste. Para testá-los, substitua o arquivo na linha de comando.
O interpretador suporta as principais funcionalidades de uma linguagem, incluindo:
- Declaração de variáveis
- Operações matemáticas
- Estruturas de controle de fluxo (if/else)
- Definição de classes e métodos
- Herança entre objetos
- Instanciação de objetos com atributos
- Impressão de variáveis e de classes
- Meta-ação
Todo método por padrão tem o retorno de um valor númerico igual a 0.
Todo objeto possui um atributo especial chamado “_prototype”, que pode apontar para um outro objeto, mas não para o próprio objeto.
Todo método possui um variável implícita chamada “self” que aponta para o objeto em que o método foi chamado.
A meta-ação é um expressão que realiza a sobrescrita na implementação do método de uma classe em tempo de execução.
A meta-ação somente tem efeito na função quando é realizada uma chamada nova sobre ela.
Os objetos sempre são enviados na atribuição por referência. Os valores númericos são enviados por valor.
Os principais módulos desenvolvidos para o interpretador:
- Reader: Realiza a leitura das linhas no arquivo de entrada.
- Describer: Descreve a estrutura das classes existentes em tabelas.
- Executor: Gerencia a execução de um bloco de código.
- Env: Armazena o ambiente de variáveis existentes no escopo de um bloco, como em métodos.
- Parser: Cria a estrutura
ast
que descreve os elementos de uma linha de código. - Eval: Realiza a execução da estrutura
ast
gerada pela parser.
Um diagrama foi construído na plataforma Whimsical para representar graficamente a estrutura do interpretador. Para acessá-lo, clique aqui.
Na pasta tests
, estão presentes códigos criados para a realização de testes unitários sobre os principais módulos do interpretador.
Contribuições são sempre bem-vindas! Para contribuir com o projeto, basta criar uma nova branch, realizar as alterações desejadas e submeter um pull request.
Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes.