diff --git a/README.md b/README.md index 8e12abc..e890ed5 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,104 @@ # BOL Interpreter -## Como executar + -Execute o comando abaixo: +## Descrição + +- 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 BOL (Bruno's Object-Oriented Language) +- Linguagem utilizada para a implementação do interpretador: Lua 5.4 + +--- + +## Desenvolvedores + +- Luiz Fernando de Freitas Oliveira (luizfernandofo) +- Pedro Augusto Serafim Belo (PedroASB) +- Ryan Fernandes Auder Lopes (ryan-fauder) + +--- +## Como Executar + +Faça um clone do repositório em sua máquina e entre na pasta `src` do projeto: + +```bash +git clone https://github.com/PedroASB/BOL-Interpreter.git && cd ./BOL-Interpreter/src/ ``` - lua interpreter.lua program.bol + +Em seguida, execute o comando abaixo para executar um exemplo de código em BOL: + +```bash +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. -## Desenvolvedores +--- -- Luiz Fernando de Freitas Oliveira -- Pedro Augusto Serafim Belo -- Ryan Fernandes Auder Lopes +## Sobre a Linguagem BOL -## Descrição +### Funcionalidades -- Trabalho desenvolvido em grupo durante a disciplina de Linguagens e Paradigmas de Programação (6º período do curso de Ciência da Computação) -- O programa consiste em um interpretador da linguagem fictícia BOL (Bruno's Object-Oriented Language) -- Linguagem utilizada para a implementação do interpretador: Lua 5.4 +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 -## Detalhes de Implementação +### Retorno de métodos -### Sobre o retorno de métodos +Todo método por padrão tem o retorno de um valor númerico igual a 0. -Todo método por padrão tem o retorno de um valor númerico igual a 0 +### Herança -### Sobre a meta-ação +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. + +### Meta-ação + +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. -### Sobre referências +### Referências Os objetos sempre são enviados na atribuição por referência. -Os valores númericos são enviados por valor. \ No newline at end of file +Os valores númericos são enviados por valor. + +--- +## Estrutura do Interpretador + +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. + +--- + +## Testes + +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 + +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. + +--- + +## Licença + +Este projeto está licenciado sob a licença MIT - veja o arquivo LICENSE para mais detalhes. \ No newline at end of file diff --git a/src/describer-test.lua b/tests/describer-test.lua similarity index 100% rename from src/describer-test.lua rename to tests/describer-test.lua diff --git a/src/env-test.lua b/tests/env-test.lua similarity index 100% rename from src/env-test.lua rename to tests/env-test.lua diff --git a/src/eval-test.lua b/tests/eval-test.lua similarity index 100% rename from src/eval-test.lua rename to tests/eval-test.lua diff --git a/src/executor-test.lua b/tests/executor-test.lua similarity index 100% rename from src/executor-test.lua rename to tests/executor-test.lua diff --git a/src/parser-test.lua b/tests/parser-test.lua similarity index 100% rename from src/parser-test.lua rename to tests/parser-test.lua diff --git a/src/reader-test.lua b/tests/reader-test.lua similarity index 100% rename from src/reader-test.lua rename to tests/reader-test.lua diff --git a/src/tests.md b/tests/tests.md similarity index 100% rename from src/tests.md rename to tests/tests.md diff --git a/src/types-test.lua b/tests/types-test.lua similarity index 100% rename from src/types-test.lua rename to tests/types-test.lua