Este é um projeto que consiste na criação de uma linguagem de programação chamada crab-lang e um compilador escrito em Rust que converte código crab-lang para JavaScript.
crab-lang é uma linguagem de programação simples projetada para facilitar a aprendizagem e compreensão de conceitos básicos de programação. Ela suporta declarações de variáveis, atribuições, literais de string, literais inteiros e uma função de impressão log para facilitar a depuração.
A linguagem crab-lang possui uma sintaxe básica com suporte para as seguintes construções:
- Declarações de variáveis:
varevar letpara variáveis mutáveis e imutáveis, respectivamente. - Atribuições: Utiliza o operador
=para atribuir valores a variáveis. - Literais de string: Delimitados por aspas duplas
"para representar cadeias de caracteres. - Literais inteiros: Representados por sequências de dígitos.
- Função
log: A palavra-chave log é usada para imprimir valores no console.
var message = "Hello, crab-lang!";
log(message);
O compilador em Rust consiste em três partes principais:
Responsável por tokenizar o código-fonte crab-lang. Identifica palavras-chave, identificadores, literais de string, literais inteiros e símbolos especiais.
Converte os tokens gerados pelo lexer em uma Árvore Sintática Abstrata (AST). Reconhece declarações de variáveis e chamadas de função, especialmente a função log.
Utiliza a AST para gerar código JavaScript equivalente. Lida com declarações de variáveis, diferencia entre let e const, e gera código JavaScript apropriado. Para chamadas da função log, utiliza literais de modelo para interpolação de string.
Certifique-se de ter o Rust instalado em sua máquina. Você pode obtê-lo em https://www.rust-lang.org/tools/install. Compilação e Execução:
git clone https://github.com/Diottodev/crab-lang.gitcd crab-langcargo build --releasecargo run ./target/release/crab-lang-compilerColoque seu código crab-lang em um arquivo, por exemplo, input.cr.
cargo run ./target/release/crab-lang-compiler input.crO código JavaScript gerado estará em um arquivo chamado output.js.
Suponha que você tenha o seguinte código crab-lang em input.cr:
var message = "Hello, crab-lang!";
log(message);
Após executar o compilador, o código JavaScript resultante será:
const message = "Hello, crab-lang!";
console.log(`{message}`);