raizcode-ofc 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -0
- package/bin/raizcode.js +0 -0
- package/compilador.js +139 -0
- package/icons/raizcode-icon.png +0 -0
- package/package.json +34 -0
- package/src/generator.js +36 -0
- package/src/lexer.js +0 -0
- package/src/parser.js +0 -0
- package/syntaxes/raizcode.tmLanguage.json +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# š± Raizcode (.rc)
|
|
2
|
+
> A linguagem de programação brasileira, feita para quem pensa em português.
|
|
3
|
+
|
|
4
|
+

|
|
5
|
+
|
|
6
|
+
O **Raizcode** Ć© uma linguagem independente, limpa e poderosa. Ela foi criada para eliminar as barreiras da programação, utilizando uma sintaxe intuitiva em portuguĆŖs, sem a necessidade de chaves `{}` ou ponto e vĆrgula `;`.
|
|
7
|
+
|
|
8
|
+
## š Instalação
|
|
9
|
+
|
|
10
|
+
Instale o ecossistema Raizcode globalmente:
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install -g raizcode
|
package/bin/raizcode.js
ADDED
|
File without changes
|
package/compilador.js
ADDED
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const os = require('os');
|
|
6
|
+
|
|
7
|
+
const args = process.argv.slice(2);
|
|
8
|
+
const comandoOuArquivo = args[0];
|
|
9
|
+
|
|
10
|
+
// ---------------------------------------------------------
|
|
11
|
+
// š SEĆĆO 1: CONFIGURAĆĆO DE AMBIENTE (--setup)
|
|
12
|
+
// ---------------------------------------------------------
|
|
13
|
+
if (comandoOuArquivo === '--setup') {
|
|
14
|
+
const vscodeExtDir = path.join(os.homedir(), '.vscode', 'extensions', 'raizcode-extension');
|
|
15
|
+
const sourceDir = __dirname;
|
|
16
|
+
|
|
17
|
+
console.log("š± [Raizcode] Iniciando configuração de ambiente...");
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
if (!fs.existsSync(vscodeExtDir)) {
|
|
21
|
+
fs.mkdirSync(vscodeExtDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Arquivos necessƔrios para a identidade visual no VS Code
|
|
25
|
+
const assets = ['package.json', 'syntaxes', 'icons'];
|
|
26
|
+
|
|
27
|
+
assets.forEach(item => {
|
|
28
|
+
const src = path.join(sourceDir, item);
|
|
29
|
+
const dest = path.join(vscodeExtDir, item);
|
|
30
|
+
|
|
31
|
+
if (fs.existsSync(src)) {
|
|
32
|
+
if (fs.lstatSync(src).isDirectory()) {
|
|
33
|
+
fs.cpSync(src, dest, { recursive: true });
|
|
34
|
+
} else {
|
|
35
|
+
fs.copyFileSync(src, dest);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
console.log("ā
[Raizcode] VS Code configurado!");
|
|
41
|
+
console.log("š Reinicie o seu editor para ativar o Ćcone RC e as cores.");
|
|
42
|
+
} catch (err) {
|
|
43
|
+
console.error("ā Erro no setup:", err.message);
|
|
44
|
+
}
|
|
45
|
+
process.exit();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ---------------------------------------------------------
|
|
49
|
+
// š§ SEĆĆO 2: TRADUTOR DE FLOWWORDS (LĆGICA DA LINGUAGEM)
|
|
50
|
+
// ---------------------------------------------------------
|
|
51
|
+
function traduzirLinha(linha) {
|
|
52
|
+
let t = linha.trim();
|
|
53
|
+
if (!t || t.startsWith("//")) return t; // Ignora vazios e comentƔrios
|
|
54
|
+
|
|
55
|
+
// Mapeamento de Comandos Simples
|
|
56
|
+
const mapa = {
|
|
57
|
+
'mostrar': 'console.log',
|
|
58
|
+
'imprimir': 'console.log',
|
|
59
|
+
'alerta': 'alert',
|
|
60
|
+
'retornar': 'return',
|
|
61
|
+
'fim': '}',
|
|
62
|
+
'senao': '} else {'
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// 1. Definição de VariÔveis (variavel nome "valor")
|
|
66
|
+
if (t.startsWith('variavel ')) {
|
|
67
|
+
let partes = t.split(' ');
|
|
68
|
+
let nome = partes[1];
|
|
69
|
+
let valor = partes.slice(2).join(' ');
|
|
70
|
+
return `let ${nome} = ${valor};`;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 2. Condicionais (se condicao)
|
|
74
|
+
if (t.startsWith('se ')) {
|
|
75
|
+
let condicao = t.replace('se ', '').trim();
|
|
76
|
+
return `if (${condicao}) {`;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 3. Loops (repetir 5)
|
|
80
|
+
if (t.startsWith('repetir ')) {
|
|
81
|
+
let vezes = t.split(' ')[1];
|
|
82
|
+
let i = `i_${Math.floor(Math.random() * 1000)}`;
|
|
83
|
+
return `for (let ${i} = 0; ${i} < ${vezes}; ${i}++) {`;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// 4. FunƧƵes (funcao nome a b)
|
|
87
|
+
if (t.startsWith('funcao ')) {
|
|
88
|
+
let partes = t.split(' ');
|
|
89
|
+
let nome = partes[1];
|
|
90
|
+
let params = partes.slice(2).join(', ');
|
|
91
|
+
return `function ${nome}(${params}) {`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// 5. Comandos de SaĆda (mostrar "texto")
|
|
95
|
+
for (let chave in mapa) {
|
|
96
|
+
if (t.startsWith(chave + " ")) {
|
|
97
|
+
let conteudo = t.replace(chave + " ", "");
|
|
98
|
+
return `${mapa[chave]}(${conteudo});`;
|
|
99
|
+
}
|
|
100
|
+
if (t === chave) return mapa[chave];
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
return t; // Retorna a linha original se não houver tradução
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// ---------------------------------------------------------
|
|
107
|
+
// š SEĆĆO 3: COMPILADOR E EXECUĆĆO
|
|
108
|
+
// ---------------------------------------------------------
|
|
109
|
+
if (!comandoOuArquivo) {
|
|
110
|
+
console.log("š± Raizcode v1.0.0");
|
|
111
|
+
console.log("Uso: raizcode <arquivo.rc> ou raizcode --setup");
|
|
112
|
+
process.exit();
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
const caminhoArquivo = path.resolve(comandoOuArquivo);
|
|
116
|
+
|
|
117
|
+
if (!fs.existsSync(caminhoArquivo)) {
|
|
118
|
+
console.error(`ā Erro: Arquivo '${comandoOuArquivo}' nĆ£o encontrado.`);
|
|
119
|
+
process.exit(1);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
try {
|
|
123
|
+
const codigoRaiz = fs.readFileSync(caminhoArquivo, 'utf-8');
|
|
124
|
+
const linhas = codigoRaiz.split('\n');
|
|
125
|
+
|
|
126
|
+
let codigoGerado = "// Gerado automaticamente pelo Raizcode\n";
|
|
127
|
+
|
|
128
|
+
linhas.forEach(linha => {
|
|
129
|
+
codigoGerado += traduzirLinha(linha) + "\n";
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
// Gera o arquivo de saĆda (ex: teste.rc -> teste.js)
|
|
133
|
+
const arquivoSaida = caminhoArquivo.replace('.rc', '.js');
|
|
134
|
+
fs.writeFileSync(arquivoSaida, codigoGerado);
|
|
135
|
+
|
|
136
|
+
console.log(`š [Raizcode] Sucesso: '${comandoOuArquivo}' processado.`);
|
|
137
|
+
} catch (err) {
|
|
138
|
+
console.error("ā Erro na compilação:", err.message);
|
|
139
|
+
}
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "raizcode-ofc",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Linguagem de programação Brasileira focada em simplicidade e performance.",
|
|
5
|
+
"main": "compilador.js",
|
|
6
|
+
"bin": {
|
|
7
|
+
"raizcode": "./compilador.js"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"test": "node compilador.js exemplos/teste.rc",
|
|
11
|
+
"start": "node compilador.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"raizcode",
|
|
15
|
+
"linguagem",
|
|
16
|
+
"portugues",
|
|
17
|
+
"compilador",
|
|
18
|
+
"javascript"
|
|
19
|
+
],
|
|
20
|
+
"author": "Riquefla",
|
|
21
|
+
"license": "MIT",
|
|
22
|
+
"engines": {
|
|
23
|
+
"node": ">=14.0.0"
|
|
24
|
+
},
|
|
25
|
+
"files": [
|
|
26
|
+
"src/",
|
|
27
|
+
"bin/",
|
|
28
|
+
"icons/",
|
|
29
|
+
"syntaxes/",
|
|
30
|
+
"compilador.js",
|
|
31
|
+
"package.json",
|
|
32
|
+
"README.md"
|
|
33
|
+
]
|
|
34
|
+
}
|
package/src/generator.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// src/generator.js
|
|
2
|
+
const mapaFlowwords = {
|
|
3
|
+
'mostrar': 'console.log',
|
|
4
|
+
'variavel': 'let',
|
|
5
|
+
'constante': 'const',
|
|
6
|
+
'se': 'if',
|
|
7
|
+
'fim': '}',
|
|
8
|
+
'funcao': 'function',
|
|
9
|
+
'repetir': 'for',
|
|
10
|
+
'entrada': 'prompt'
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
function traduzirLinha(linha) {
|
|
14
|
+
let t = linha.trim();
|
|
15
|
+
if (!t) return "";
|
|
16
|
+
|
|
17
|
+
// Lógica simples de substituição (NĆvel 1)
|
|
18
|
+
if (t.startsWith('mostrar ')) {
|
|
19
|
+
return t.replace('mostrar ', 'console.log(') + ');';
|
|
20
|
+
}
|
|
21
|
+
if (t.startsWith('variavel ')) {
|
|
22
|
+
// Transforma: variavel nome "Riquefla" -> let nome = "Riquefla";
|
|
23
|
+
let partes = t.split(' ');
|
|
24
|
+
return `let ${partes[1]} = ${partes.slice(2).join(' ')};`;
|
|
25
|
+
}
|
|
26
|
+
if (t.startsWith('se ')) {
|
|
27
|
+
return `if (${t.replace('se ', '')}) {`;
|
|
28
|
+
}
|
|
29
|
+
if (t === 'fim') {
|
|
30
|
+
return '}';
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return t; // Se não conhecer, mantém (ex: cÔlculos matemÔticos)
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
module.exports = { traduzirLinha };
|
package/src/lexer.js
ADDED
|
File without changes
|
package/src/parser.js
ADDED
|
File without changes
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Raizcode",
|
|
3
|
+
"scopeName": "source.rc",
|
|
4
|
+
"patterns": [
|
|
5
|
+
{
|
|
6
|
+
"name": "comment.line.double-slash.rc",
|
|
7
|
+
"match": "//.*"
|
|
8
|
+
},
|
|
9
|
+
{
|
|
10
|
+
"name": "keyword.control.rc",
|
|
11
|
+
"match": "\\b(se|senao|senaose|fim|repetir|enquanto|para)\\b"
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "keyword.declaration.rc",
|
|
15
|
+
"match": "\\b(variavel|constante|funcao|classe)\\b"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "support.function.rc",
|
|
19
|
+
"match": "\\b(mostrar|imprimir|alerta|entrada|perguntar|executar|retornar)\\b"
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
"name": "string.quoted.double.rc",
|
|
23
|
+
"begin": "\"",
|
|
24
|
+
"end": "\"",
|
|
25
|
+
"patterns": [
|
|
26
|
+
{
|
|
27
|
+
"name": "constant.character.escape.rc",
|
|
28
|
+
"match": "\\\\."
|
|
29
|
+
}
|
|
30
|
+
]
|
|
31
|
+
}
|
|
32
|
+
]
|
|
33
|
+
}
|