Giter Site home page Giter Site logo

jlox's Introduction

JLox

Implementação de um interpretador para a linguagem Lox feita em Java seguindo o livro Crafting Intepreters do Robert Nystrom.

Aprendizado

A partir do conteúdo do livro e desta implementação é possível aprender diversos conceitos de como é implementado uma linguagem de programação, como tokenização, análise estática, análise semântica, etc.

Funcionalidades extras

Além das funcionalidades implementadas no livro, também são desenvolvidas algumas funcionalidades sugeridas e outras que considerei interessante implementar:

  • Comando break para a interrupção de loops;
  • O comando print foi removido em decorrência da criação de uma função print();
  • Criada função exit() para encerrar o script;
  • Criada função input() para receber entradas do usuário;
  • Operador de resto da divisão % incluído;

Executando o projeto

Para executar o projeto é necessário o Maven e executar o seguinte comando na raiz do projeto:

mvn install

Depois disso basta executar o programa:

java -jar target/jlox-1.0-SNAPSHOT.jar

Exemplos de programas em Lox

Criando uma lista ligada:

class ListaLigada {
	init() {
		this.proximo = nil;
		this.valor = nil;
	}

	adiciona(item) {
		var corrente = this;
		while(corrente.valor != nil) {
			corrente = this.proximo;
		}

		corrente.valor = item;
		corrente.proximo = ListaLigada();
	}

	iterar(funcao) {
		var corrente = this;
		while (corrente.proximo != nil) {
			funcao(corrente.valor);
			corrente = corrente.proximo;
		}
	}
}

Exemplo de orientação a objetos com herança

class Veiculo {
    init(nome) {
        this.nome = nome;
    }
} 

class Carro < Veiculo {
    init(nome, quantidadeDeRodas) {
        super.init(nome);
        this.quantidadeDeRodas = quantidadeDeRodas;
    }
}

Utlização dos objetos e exemplo de função de primeira ordem sendo passada por parâmetro:

fun imprimir(carro) {
	print("Você cadastrou o carro " + carro.nome + " com " + carro.quantidadeDeRodas + " rodas.");
}

fun main() {
	var lista = ListaLigada();
	var sair;

    while (true) {
        var nome = input("Digite o nome do carro: ");
        var quantidadeDeRodas = input("Digite a quantidade de rodas: ");
        
        var carro = Carro(nome, quantidadeDeRodas);
        lista.adiciona(carro);

        print(carro.nome);
        sair = input("Digite 'sim' se deseja sair: ");
        
        if (sair == "sim") {
            break;
        }
    }

    // Função de primeira ordem sendo passada como parâmetro
    // utilizando um método similar ao foreach
    lista.iterar(imprimir);
}

main();

jlox's People

Contributors

lucaspolo avatar

Stargazers

 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.