@designliquido/foles 0.0.1 → 0.1.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 +31 -3
- package/execucao.js +10 -1
- package/execucao.js.map +1 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico-reverso.d.ts +18 -0
- package/fontes/avaliador-sintatico/avaliador-sintatico-reverso.js +83 -0
- package/fontes/avaliador-sintatico/avaliador-sintatico-reverso.js.map +1 -0
- package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +2 -1
- package/fontes/avaliador-sintatico/avaliador-sintatico.js +15 -9
- package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
- package/fontes/foles.d.ts +7 -1
- package/fontes/foles.js +15 -0
- package/fontes/foles.js.map +1 -1
- package/fontes/lexador/lexador-reverso.d.ts +33 -0
- package/fontes/lexador/lexador-reverso.js +177 -0
- package/fontes/lexador/lexador-reverso.js.map +1 -0
- package/fontes/lexador/lexador.js +11 -11
- package/fontes/lexador/lexador.js.map +1 -1
- package/fontes/lexador/palavras-reservadas/css.d.ts +5 -0
- package/fontes/lexador/palavras-reservadas/css.js +11 -0
- package/fontes/lexador/palavras-reservadas/css.js.map +1 -0
- package/fontes/lexador/{palavras-reservadas.d.ts → palavras-reservadas/foles.d.ts} +0 -0
- package/fontes/lexador/palavras-reservadas/foles.js +141 -0
- package/fontes/lexador/palavras-reservadas/foles.js.map +1 -0
- package/fontes/lexador/palavras-reservadas/index.d.ts +2 -0
- package/fontes/lexador/palavras-reservadas/index.js +19 -0
- package/fontes/lexador/palavras-reservadas/index.js.map +1 -0
- package/fontes/modificadores/dicionario/dicionario-modificadores.js +0 -1
- package/fontes/modificadores/dicionario/dicionario-modificadores.js.map +1 -1
- package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.d.ts +3 -0
- package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.js +10 -0
- package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.js.map +1 -0
- package/fontes/modificadores/superclasse/seletor-reverso-modificador.d.ts +3 -0
- package/fontes/modificadores/superclasse/seletor-reverso-modificador.js +15 -0
- package/fontes/modificadores/superclasse/seletor-reverso-modificador.js.map +1 -0
- package/fontes/tipos-de-simbolos/css.d.ts +20 -0
- package/fontes/tipos-de-simbolos/css.js +22 -0
- package/fontes/tipos-de-simbolos/css.js.map +1 -0
- package/fontes/{tipos-de-simbolos.d.ts → tipos-de-simbolos/foles.d.ts} +4 -0
- package/fontes/{tipos-de-simbolos.js → tipos-de-simbolos/foles.js} +6 -2
- package/fontes/tipos-de-simbolos/foles.js.map +1 -0
- package/fontes/tipos-de-simbolos/index.d.ts +2 -0
- package/fontes/tipos-de-simbolos/index.js +19 -0
- package/fontes/tipos-de-simbolos/index.js.map +1 -0
- package/fontes/tradutor/estruturas-lmht.d.ts +5 -0
- package/fontes/tradutor/estruturas-lmht.js +7 -0
- package/fontes/tradutor/estruturas-lmht.js.map +1 -0
- package/fontes/tradutor/index.d.ts +2 -6
- package/fontes/tradutor/index.js +15 -21
- package/fontes/tradutor/index.js.map +1 -1
- package/fontes/tradutor/tradutor-reverso.d.ts +6 -0
- package/fontes/tradutor/tradutor-reverso.js +25 -0
- package/fontes/tradutor/tradutor-reverso.js.map +1 -0
- package/fontes/tradutor/tradutor.d.ts +6 -0
- package/fontes/tradutor/tradutor.js +25 -0
- package/fontes/tradutor/tradutor.js.map +1 -0
- package/package.json +2 -2
- package/testes/lexador.test.js +9 -9
- package/testes/lexador.test.js.map +1 -1
- package/fontes/lexador/palavras-reservadas.js +0 -141
- package/fontes/lexador/palavras-reservadas.js.map +0 -1
- package/fontes/tipos-de-simbolos.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# FolEs
|
|
2
|
+
|
|
2
3
|
Folhas de Estilo em Português, para geração de CSS.
|
|
3
4
|
|
|
4
5
|
## Motivação
|
|
@@ -7,13 +8,15 @@ Assim como linguagens de programação e de marcação, linguagens de estilo com
|
|
|
7
8
|
|
|
8
9
|
FolEs começa do mesmo ponto que [SASS](https://sass-lang.com/), como uma linguagem de extensão que gera CSS. A base de CSS é HTML. A base de FolEs é [LMHT](https://github.com/DesignLiquido/LMHT).
|
|
9
10
|
|
|
11
|
+
Adicionalmente, FolEs possui um recurso de tradução reversa. Em outras palavras, FolEs pode ingerir um arquivo CSS e devolver seu correspondente em FolEs.
|
|
12
|
+
|
|
10
13
|
## Exemplos
|
|
11
14
|
|
|
12
15
|
Se queremos definir estilos para um documento inteiro, podemos usar:
|
|
13
16
|
|
|
14
17
|
```
|
|
15
18
|
lmht {
|
|
16
|
-
tamanho-
|
|
19
|
+
tamanho-fonte: 12px;
|
|
17
20
|
}
|
|
18
21
|
```
|
|
19
22
|
|
|
@@ -25,8 +28,30 @@ html {
|
|
|
25
28
|
}
|
|
26
29
|
```
|
|
27
30
|
|
|
31
|
+
## Instalação
|
|
32
|
+
|
|
33
|
+
Para instalar FolEs globalmente, use o seguinte comando:
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
npm i -g @designliquido/foles
|
|
37
|
+
```
|
|
38
|
+
|
|
28
39
|
## Execução
|
|
29
40
|
|
|
41
|
+
Após instalar globalmente pelo npm, para executar FolEs traduzindo um arquivo chamado `exemplo.foles`, use:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
foles exemplo.foles
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Para tradução reversa:
|
|
48
|
+
|
|
49
|
+
```sh
|
|
50
|
+
foles exemplo.css
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### VSCode
|
|
54
|
+
|
|
30
55
|
No Visual Studio Code, adicione no seu `launch.json` o seguinte:
|
|
31
56
|
|
|
32
57
|
```jsonc
|
|
@@ -38,7 +63,10 @@ No Visual Studio Code, adicione no seu `launch.json` o seguinte:
|
|
|
38
63
|
"skipFiles": ["<node_internals>/**", "node_modules/**"],
|
|
39
64
|
"cwd": "${workspaceRoot}",
|
|
40
65
|
"console": "integratedTerminal",
|
|
41
|
-
"args": [
|
|
66
|
+
"args": [
|
|
67
|
+
"${workspaceFolder}${pathSeparator}execucao.ts",
|
|
68
|
+
"${workspaceFolder}${pathSeparator}exemplos${pathSeparator}exemplo.foles"
|
|
69
|
+
],
|
|
42
70
|
"runtimeExecutable": "node",
|
|
43
71
|
"runtimeArgs": ["--nolazy", "-r", "ts-node/register/transpile-only"]
|
|
44
72
|
},
|
|
@@ -54,4 +82,4 @@ FolEs copia vários elementos de [Delégua](https://github.com/DesignLiquido/del
|
|
|
54
82
|
|
|
55
83
|
| FolEs | CSS |
|
|
56
84
|
| ------------- | ----------|
|
|
57
|
-
| tamanho-
|
|
85
|
+
| tamanho-fonte | font-size |
|
package/execucao.js
CHANGED
|
@@ -19,7 +19,16 @@ const principal = () => {
|
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
const foles = new foles_1.FolEs();
|
|
22
|
-
|
|
22
|
+
if (nomeArquivo.endsWith("foles")) {
|
|
23
|
+
foles.converterParaCss(nomeArquivo);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
else if (nomeArquivo.endsWith("css")) {
|
|
27
|
+
const retorno = foles.converterParaFolEs(nomeArquivo);
|
|
28
|
+
console.log(retorno);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
throw new Error("Formato de arquivo não reconhecido.");
|
|
23
32
|
};
|
|
24
33
|
principal();
|
|
25
34
|
//# sourceMappingURL=execucao.js.map
|
package/execucao.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"execucao.js","sourceRoot":"","sources":["../execucao.ts"],"names":[],"mappings":";;AAAA,0CAAuC;AACvC,yCAAoC;AAEpC,MAAM,SAAS,GAAG,GAAG,EAAE;IACnB,MAAM,oBAAoB,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC3C,IAAI,WAAmB,CAAC;IAExB,oBAAoB;SACf,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;SAC1D,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC7B;IACL,CAAC,CAAC,CAAC;IAEP,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAE3C,IAAI,CAAC,WAAW,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO;KACV;IAED,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"execucao.js","sourceRoot":"","sources":["../execucao.ts"],"names":[],"mappings":";;AAAA,0CAAuC;AACvC,yCAAoC;AAEpC,MAAM,SAAS,GAAG,GAAG,EAAE;IACnB,MAAM,oBAAoB,GAAG,IAAI,mBAAO,EAAE,CAAC;IAC3C,IAAI,WAAmB,CAAC;IAExB,oBAAoB;SACf,QAAQ,CAAC,eAAe,EAAE,+BAA+B,CAAC;SAC1D,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE;QACjB,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YACrB,WAAW,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC7B;IACL,CAAC,CAAC,CAAC;IAEP,oBAAoB,CAAC,KAAK,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,EAAE,CAAC;IAE3C,IAAI,CAAC,WAAW,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,EAAE,CAAC,CAAC;QACrE,OAAO;KACV;IAED,MAAM,KAAK,GAAG,IAAI,aAAK,EAAE,CAAC;IAE1B,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QAC/B,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;QACpC,OAAO;KACV;SAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;QACpC,MAAM,OAAO,GAAG,KAAK,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACrB,OAAO;KACV;IAED,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;AAC3D,CAAC,CAAA;AAED,SAAS,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Declaracao } from "../declaracoes";
|
|
2
|
+
import { Simbolo } from "../lexador";
|
|
3
|
+
import { ErroAvaliadorSintatico } from "./erro-avaliador-sintatico";
|
|
4
|
+
export declare class AvaliadorSintaticoReverso {
|
|
5
|
+
simbolos: Simbolo[];
|
|
6
|
+
erros: ErroAvaliadorSintatico[];
|
|
7
|
+
atual: number;
|
|
8
|
+
constructor();
|
|
9
|
+
erro(simbolo: Simbolo, mensagemDeErro: string): ErroAvaliadorSintatico;
|
|
10
|
+
estaNoFinal(): boolean;
|
|
11
|
+
avancarEDevolverAnterior(): Simbolo;
|
|
12
|
+
verificarTipoSimboloAtual(tipo: string): boolean;
|
|
13
|
+
consumir(tipo: string, mensagemDeErro: string): Simbolo;
|
|
14
|
+
declaracaoPorSeletor(): Declaracao;
|
|
15
|
+
declaracaoPorTag(): Declaracao;
|
|
16
|
+
declaracao(): any;
|
|
17
|
+
analisar(simbolos: Simbolo[]): Declaracao[];
|
|
18
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.AvaliadorSintaticoReverso = void 0;
|
|
7
|
+
const declaracoes_1 = require("../declaracoes");
|
|
8
|
+
const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
|
|
9
|
+
const seletor_reverso_modificador_1 = require("../modificadores/superclasse/seletor-reverso-modificador");
|
|
10
|
+
const css_1 = __importDefault(require("../tipos-de-simbolos/css"));
|
|
11
|
+
class AvaliadorSintaticoReverso {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.simbolos = [];
|
|
14
|
+
}
|
|
15
|
+
erro(simbolo, mensagemDeErro) {
|
|
16
|
+
const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
|
|
17
|
+
this.erros.push(excecao);
|
|
18
|
+
return excecao;
|
|
19
|
+
}
|
|
20
|
+
estaNoFinal() {
|
|
21
|
+
return this.atual === this.simbolos.length;
|
|
22
|
+
}
|
|
23
|
+
avancarEDevolverAnterior() {
|
|
24
|
+
if (!this.estaNoFinal())
|
|
25
|
+
this.atual += 1;
|
|
26
|
+
return this.simbolos[this.atual - 1];
|
|
27
|
+
}
|
|
28
|
+
verificarTipoSimboloAtual(tipo) {
|
|
29
|
+
if (this.estaNoFinal())
|
|
30
|
+
return false;
|
|
31
|
+
return this.simbolos[this.atual].tipo === tipo;
|
|
32
|
+
}
|
|
33
|
+
consumir(tipo, mensagemDeErro) {
|
|
34
|
+
if (this.verificarTipoSimboloAtual(tipo))
|
|
35
|
+
return this.avancarEDevolverAnterior();
|
|
36
|
+
throw this.erro(this.simbolos[this.atual], mensagemDeErro);
|
|
37
|
+
}
|
|
38
|
+
declaracaoPorSeletor() {
|
|
39
|
+
// TODO: Pensar lógica para seletor de classes.
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
declaracaoPorTag() {
|
|
43
|
+
const simboloSeletor = this.avancarEDevolverAnterior();
|
|
44
|
+
this.consumir(css_1.default.CHAVE_ESQUERDA, "Esperado '{' após declaração de seletor.");
|
|
45
|
+
const modificadores = [];
|
|
46
|
+
while (!this.verificarTipoSimboloAtual(css_1.default.CHAVE_DIREITA)) {
|
|
47
|
+
const modificador = this.consumir(css_1.default.IDENTIFICADOR, "Esperado nome do atributo de identificação.");
|
|
48
|
+
this.consumir(css_1.default.DOIS_PONTOS, `Esperado ':' após declaração de modificador '${modificador.lexema}'.`);
|
|
49
|
+
const valorModificador = this.avancarEDevolverAnterior();
|
|
50
|
+
const quantificador = this.avancarEDevolverAnterior();
|
|
51
|
+
this.consumir(css_1.default.PONTO_E_VIRGULA, `Esperado ';' após declaração de valor de modificador '${modificador.lexema}'.`);
|
|
52
|
+
const classeModificadora = new seletor_reverso_modificador_1.SeletorReversoModificador(modificador.lexema, valorModificador.lexema, quantificador.lexema);
|
|
53
|
+
modificadores.push(classeModificadora);
|
|
54
|
+
}
|
|
55
|
+
this.avancarEDevolverAnterior(); // chave direita
|
|
56
|
+
return new declaracoes_1.Declaracao(simboloSeletor.lexema, modificadores);
|
|
57
|
+
}
|
|
58
|
+
declaracao() {
|
|
59
|
+
if (this.estaNoFinal())
|
|
60
|
+
return null;
|
|
61
|
+
const simboloAtual = this.simbolos[this.atual];
|
|
62
|
+
if (!simboloAtual)
|
|
63
|
+
return null;
|
|
64
|
+
switch (simboloAtual.tipo) {
|
|
65
|
+
case css_1.default.TAG:
|
|
66
|
+
return this.declaracaoPorTag();
|
|
67
|
+
case css_1.default.IDENTIFICADOR:
|
|
68
|
+
return this.declaracaoPorSeletor();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
analisar(simbolos) {
|
|
72
|
+
this.simbolos = simbolos;
|
|
73
|
+
this.erros = [];
|
|
74
|
+
this.atual = 0;
|
|
75
|
+
const declaracoes = [];
|
|
76
|
+
while (!this.estaNoFinal()) {
|
|
77
|
+
declaracoes.push(this.declaracao());
|
|
78
|
+
}
|
|
79
|
+
return declaracoes;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
exports.AvaliadorSintaticoReverso = AvaliadorSintaticoReverso;
|
|
83
|
+
//# sourceMappingURL=avaliador-sintatico-reverso.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico-reverso.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico-reverso.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,8 @@ export declare class AvaliadorSintatico {
|
|
|
11
11
|
avancarEDevolverAnterior(): Simbolo;
|
|
12
12
|
verificarTipoSimboloAtual(tipo: string): boolean;
|
|
13
13
|
consumir(tipo: string, mensagemDeErro: string): Simbolo;
|
|
14
|
-
|
|
14
|
+
declaracaoPorSeletor(): Declaracao;
|
|
15
|
+
declaracaoPorEstrutura(): Declaracao;
|
|
15
16
|
declaracao(): any;
|
|
16
17
|
analisar(simbolos: Simbolo[]): Declaracao[];
|
|
17
18
|
}
|
|
@@ -7,7 +7,7 @@ exports.AvaliadorSintatico = void 0;
|
|
|
7
7
|
const _1 = require(".");
|
|
8
8
|
const declaracoes_1 = require("../declaracoes");
|
|
9
9
|
const superclasse_1 = require("../modificadores/superclasse");
|
|
10
|
-
const
|
|
10
|
+
const foles_1 = __importDefault(require("../tipos-de-simbolos/foles"));
|
|
11
11
|
class AvaliadorSintatico {
|
|
12
12
|
constructor() {
|
|
13
13
|
this.simbolos = [];
|
|
@@ -35,16 +35,20 @@ class AvaliadorSintatico {
|
|
|
35
35
|
return this.avancarEDevolverAnterior();
|
|
36
36
|
throw this.erro(this.simbolos[this.atual], mensagemDeErro);
|
|
37
37
|
}
|
|
38
|
-
|
|
38
|
+
declaracaoPorSeletor() {
|
|
39
|
+
// TODO @Vitor: Pensar lógica para seletor de classes.
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
declaracaoPorEstrutura() {
|
|
39
43
|
const simboloSeletor = this.avancarEDevolverAnterior();
|
|
40
|
-
this.consumir(
|
|
44
|
+
this.consumir(foles_1.default.CHAVE_ESQUERDA, "Esperado '{' após declaração de seletor.");
|
|
41
45
|
const modificadores = [];
|
|
42
|
-
while (!this.verificarTipoSimboloAtual(
|
|
43
|
-
const modificador = this.consumir(
|
|
44
|
-
this.consumir(
|
|
46
|
+
while (!this.verificarTipoSimboloAtual(foles_1.default.CHAVE_DIREITA)) {
|
|
47
|
+
const modificador = this.consumir(foles_1.default.IDENTIFICADOR, "Esperado nome do atributo de identificação.");
|
|
48
|
+
this.consumir(foles_1.default.DOIS_PONTOS, `Esperado ':' após declaração de modificador '${modificador.lexema}'.`);
|
|
45
49
|
const valorModificador = this.avancarEDevolverAnterior();
|
|
46
50
|
const quantificador = this.avancarEDevolverAnterior();
|
|
47
|
-
this.consumir(
|
|
51
|
+
this.consumir(foles_1.default.PONTO_E_VIRGULA, `Esperado ';' após declaração de valor de modificador '${modificador.lexema}'.`);
|
|
48
52
|
const classeModificadora = new superclasse_1.SeletorModificador(modificador.lexema, valorModificador.lexema, quantificador.lexema);
|
|
49
53
|
modificadores.push(classeModificadora);
|
|
50
54
|
}
|
|
@@ -58,8 +62,10 @@ class AvaliadorSintatico {
|
|
|
58
62
|
if (!simboloAtual)
|
|
59
63
|
return null;
|
|
60
64
|
switch (simboloAtual.tipo) {
|
|
61
|
-
case
|
|
62
|
-
return this.
|
|
65
|
+
case foles_1.default.ESTRUTURA:
|
|
66
|
+
return this.declaracaoPorEstrutura();
|
|
67
|
+
case foles_1.default.IDENTIFICADOR:
|
|
68
|
+
return this.declaracaoPorSeletor();
|
|
63
69
|
}
|
|
64
70
|
}
|
|
65
71
|
analisar(simbolos) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"avaliador-sintatico.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":";;;;;;AAAA,wBAA2C;AAC3C,gDAA4C;AAG5C,8DAAkE;AAElE,
|
|
1
|
+
{"version":3,"file":"avaliador-sintatico.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"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"}
|
package/fontes/foles.d.ts
CHANGED
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { AvaliadorSintatico } from "./avaliador-sintatico";
|
|
2
|
+
import { AvaliadorSintaticoReverso } from './avaliador-sintatico/avaliador-sintatico-reverso';
|
|
2
3
|
import { Lexador } from "./lexador";
|
|
3
|
-
import {
|
|
4
|
+
import { LexadorReverso } from './lexador/lexador-reverso';
|
|
5
|
+
import { Tradutor, TradutorReverso } from "./tradutor";
|
|
4
6
|
export declare class FolEs {
|
|
5
7
|
lexador: Lexador;
|
|
8
|
+
lexadorReverso: LexadorReverso;
|
|
6
9
|
avaliadorSintatico: AvaliadorSintatico;
|
|
10
|
+
avaliadorSintaticoReverso: AvaliadorSintaticoReverso;
|
|
7
11
|
tradutor: Tradutor;
|
|
12
|
+
tradutorReverso: TradutorReverso;
|
|
8
13
|
constructor();
|
|
9
14
|
converterParaCss(nomeArquivo: string): void;
|
|
15
|
+
converterParaFolEs(nomeArquivo: string): string;
|
|
10
16
|
}
|
package/fontes/foles.js
CHANGED
|
@@ -26,13 +26,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
26
26
|
exports.FolEs = void 0;
|
|
27
27
|
const arquivos = __importStar(require("fs"));
|
|
28
28
|
const avaliador_sintatico_1 = require("./avaliador-sintatico");
|
|
29
|
+
const avaliador_sintatico_reverso_1 = require("./avaliador-sintatico/avaliador-sintatico-reverso");
|
|
29
30
|
const lexador_1 = require("./lexador");
|
|
31
|
+
const lexador_reverso_1 = require("./lexador/lexador-reverso");
|
|
30
32
|
const tradutor_1 = require("./tradutor");
|
|
31
33
|
class FolEs {
|
|
32
34
|
constructor() {
|
|
33
35
|
this.lexador = new lexador_1.Lexador();
|
|
36
|
+
this.lexadorReverso = new lexador_reverso_1.LexadorReverso();
|
|
34
37
|
this.avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico();
|
|
38
|
+
this.avaliadorSintaticoReverso = new avaliador_sintatico_reverso_1.AvaliadorSintaticoReverso();
|
|
35
39
|
this.tradutor = new tradutor_1.Tradutor();
|
|
40
|
+
this.tradutorReverso = new tradutor_1.TradutorReverso();
|
|
36
41
|
}
|
|
37
42
|
converterParaCss(nomeArquivo) {
|
|
38
43
|
const dadosDoArquivo = arquivos.readFileSync(nomeArquivo);
|
|
@@ -44,6 +49,16 @@ class FolEs {
|
|
|
44
49
|
const traducao = this.tradutor.traduzir(resultadoAvaliadorSintatico);
|
|
45
50
|
console.log(traducao);
|
|
46
51
|
}
|
|
52
|
+
converterParaFolEs(nomeArquivo) {
|
|
53
|
+
const dadosDoArquivo = arquivos.readFileSync(nomeArquivo);
|
|
54
|
+
const conteudoDoArquivo = dadosDoArquivo
|
|
55
|
+
.toString()
|
|
56
|
+
.split('\n');
|
|
57
|
+
const resultadoLexadorReverso = this.lexadorReverso.mapear(conteudoDoArquivo);
|
|
58
|
+
const resultadoAvaliadorSintaticoReverso = this.avaliadorSintaticoReverso.analisar(resultadoLexadorReverso.simbolos);
|
|
59
|
+
const traducaoReversa = this.tradutorReverso.traduzir(resultadoAvaliadorSintaticoReverso);
|
|
60
|
+
return traducaoReversa;
|
|
61
|
+
}
|
|
47
62
|
}
|
|
48
63
|
exports.FolEs = FolEs;
|
|
49
64
|
//# sourceMappingURL=foles.js.map
|
package/fontes/foles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foles.js","sourceRoot":"","sources":["../../fontes/foles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAE/B,+DAA2D;AAC3D,uCAAoC;AACpC,
|
|
1
|
+
{"version":3,"file":"foles.js","sourceRoot":"","sources":["../../fontes/foles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAE/B,+DAA2D;AAC3D,mGAA8F;AAC9F,uCAAoC;AACpC,+DAA2D;AAC3D,yCAAuD;AAEvD,MAAa,KAAK;IAQd;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,GAAG,IAAI,gCAAc,EAAE,CAAC;QAC3C,IAAI,CAAC,kBAAkB,GAAG,IAAI,wCAAkB,EAAE,CAAC;QACnD,IAAI,CAAC,yBAAyB,GAAG,IAAI,uDAAyB,EAAE,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;QAC/B,IAAI,CAAC,eAAe,GAAG,IAAI,0BAAe,EAAE,CAAC;IACjD,CAAC;IAED,gBAAgB,CAAC,WAAmB;QAChC,MAAM,cAAc,GAAW,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAa,cAAc;aAC7C,QAAQ,EAAE;aACV,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAChE,MAAM,2BAA2B,GAAG,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChG,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,2BAA2B,CAAC,CAAC;QACrE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,kBAAkB,CAAC,WAAmB;QAClC,MAAM,cAAc,GAAW,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAClE,MAAM,iBAAiB,GAAa,cAAc;aAC7C,QAAQ,EAAE;aACV,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjB,MAAM,uBAAuB,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;QAC9E,MAAM,kCAAkC,GAAG,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QACrH,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,kCAAkC,CAAC,CAAC;QAC1F,OAAO,eAAe,CAAC;IAC3B,CAAC;CACJ;AAxCD,sBAwCC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ErroLexador } from "./erro-lexador";
|
|
2
|
+
import { Simbolo } from "./simbolo";
|
|
3
|
+
export declare class LexadorReverso {
|
|
4
|
+
linha: number;
|
|
5
|
+
atual: number;
|
|
6
|
+
inicioSimbolo: number;
|
|
7
|
+
codigo: string[];
|
|
8
|
+
simbolos: Simbolo[];
|
|
9
|
+
erros: ErroLexador[];
|
|
10
|
+
constructor();
|
|
11
|
+
/**
|
|
12
|
+
* Indica se o código está na última linha.
|
|
13
|
+
* @returns Verdadeiro se contador de linhas está na última linha.
|
|
14
|
+
* Falso caso contrário.
|
|
15
|
+
*/
|
|
16
|
+
eUltimaLinha(): boolean;
|
|
17
|
+
eFinalDoCodigo(): boolean;
|
|
18
|
+
eFinalDaLinha(): boolean;
|
|
19
|
+
simboloAtual(): string;
|
|
20
|
+
eDigito(caractere: string): boolean;
|
|
21
|
+
proximoSimbolo(): string;
|
|
22
|
+
eAlfabeto(caractere: string): boolean;
|
|
23
|
+
eAlfabetoOuDigito(caractere: any): boolean;
|
|
24
|
+
avancar(): void;
|
|
25
|
+
identificarPalavraChave(): void;
|
|
26
|
+
adicionarSimbolo(tipo: any, literal?: any): void;
|
|
27
|
+
analisarNumero(): void;
|
|
28
|
+
analisarToken(): void;
|
|
29
|
+
mapear(codigo: string[]): {
|
|
30
|
+
simbolos: Simbolo[];
|
|
31
|
+
erros: ErroLexador[];
|
|
32
|
+
};
|
|
33
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.LexadorReverso = void 0;
|
|
7
|
+
const simbolo_1 = require("./simbolo");
|
|
8
|
+
const css_1 = __importDefault(require("./palavras-reservadas/css"));
|
|
9
|
+
const css_2 = __importDefault(require("../tipos-de-simbolos/css"));
|
|
10
|
+
class LexadorReverso {
|
|
11
|
+
constructor() {
|
|
12
|
+
this.codigo = [""];
|
|
13
|
+
this.simbolos = [];
|
|
14
|
+
this.erros = [];
|
|
15
|
+
this.atual = 0;
|
|
16
|
+
this.linha = 0;
|
|
17
|
+
this.inicioSimbolo = 0;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Indica se o código está na última linha.
|
|
21
|
+
* @returns Verdadeiro se contador de linhas está na última linha.
|
|
22
|
+
* Falso caso contrário.
|
|
23
|
+
*/
|
|
24
|
+
eUltimaLinha() {
|
|
25
|
+
return this.linha >= this.codigo.length - 1;
|
|
26
|
+
}
|
|
27
|
+
eFinalDoCodigo() {
|
|
28
|
+
return (this.eUltimaLinha() &&
|
|
29
|
+
this.codigo[this.codigo.length - 1].length <= this.atual);
|
|
30
|
+
}
|
|
31
|
+
eFinalDaLinha() {
|
|
32
|
+
if (this.codigo.length === this.linha) {
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
return this.atual >= this.codigo[this.linha].length;
|
|
36
|
+
}
|
|
37
|
+
simboloAtual() {
|
|
38
|
+
if (this.eFinalDaLinha())
|
|
39
|
+
return "\0";
|
|
40
|
+
return this.codigo[this.linha].charAt(this.atual);
|
|
41
|
+
}
|
|
42
|
+
eDigito(caractere) {
|
|
43
|
+
return caractere >= "0" && caractere <= "9";
|
|
44
|
+
}
|
|
45
|
+
proximoSimbolo() {
|
|
46
|
+
return this.codigo[this.linha].charAt(this.atual + 1);
|
|
47
|
+
}
|
|
48
|
+
eAlfabeto(caractere) {
|
|
49
|
+
const acentuacoes = [
|
|
50
|
+
"á",
|
|
51
|
+
"Á",
|
|
52
|
+
"ã",
|
|
53
|
+
"Ã",
|
|
54
|
+
"â",
|
|
55
|
+
"Â",
|
|
56
|
+
"à",
|
|
57
|
+
"À",
|
|
58
|
+
"é",
|
|
59
|
+
"É",
|
|
60
|
+
"ê",
|
|
61
|
+
"Ê",
|
|
62
|
+
"í",
|
|
63
|
+
"Í",
|
|
64
|
+
"ó",
|
|
65
|
+
"Ó",
|
|
66
|
+
"õ",
|
|
67
|
+
"Õ",
|
|
68
|
+
"ô",
|
|
69
|
+
"Ô",
|
|
70
|
+
"ú",
|
|
71
|
+
"Ú",
|
|
72
|
+
"ç",
|
|
73
|
+
"Ç",
|
|
74
|
+
"_",
|
|
75
|
+
"-",
|
|
76
|
+
];
|
|
77
|
+
return ((caractere >= "a" && caractere <= "z") ||
|
|
78
|
+
(caractere >= "A" && caractere <= "Z") ||
|
|
79
|
+
acentuacoes.includes(caractere));
|
|
80
|
+
}
|
|
81
|
+
eAlfabetoOuDigito(caractere) {
|
|
82
|
+
return this.eDigito(caractere) || this.eAlfabeto(caractere);
|
|
83
|
+
}
|
|
84
|
+
avancar() {
|
|
85
|
+
this.atual += 1;
|
|
86
|
+
if (this.eFinalDaLinha() && !this.eUltimaLinha()) {
|
|
87
|
+
this.linha++;
|
|
88
|
+
this.atual = 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
identificarPalavraChave() {
|
|
92
|
+
while (this.eAlfabetoOuDigito(this.simboloAtual())) {
|
|
93
|
+
this.avancar();
|
|
94
|
+
}
|
|
95
|
+
const codigo = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual);
|
|
96
|
+
const tipo = codigo in css_1.default
|
|
97
|
+
? css_1.default[codigo]
|
|
98
|
+
: css_2.default.IDENTIFICADOR;
|
|
99
|
+
this.adicionarSimbolo(tipo);
|
|
100
|
+
}
|
|
101
|
+
adicionarSimbolo(tipo, literal = null) {
|
|
102
|
+
const texto = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual);
|
|
103
|
+
this.simbolos.push(new simbolo_1.Simbolo(tipo, texto, literal, this.linha + 1));
|
|
104
|
+
}
|
|
105
|
+
analisarNumero() {
|
|
106
|
+
while (this.eDigito(this.simboloAtual())) {
|
|
107
|
+
this.avancar();
|
|
108
|
+
}
|
|
109
|
+
if (this.simboloAtual() == "." && this.eDigito(this.proximoSimbolo())) {
|
|
110
|
+
this.avancar();
|
|
111
|
+
while (this.eDigito(this.simboloAtual())) {
|
|
112
|
+
this.avancar();
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const numeroCompleto = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual);
|
|
116
|
+
this.adicionarSimbolo(css_2.default.NUMERO, parseFloat(numeroCompleto));
|
|
117
|
+
}
|
|
118
|
+
analisarToken() {
|
|
119
|
+
const caractere = this.simboloAtual();
|
|
120
|
+
switch (caractere) {
|
|
121
|
+
case "{":
|
|
122
|
+
this.adicionarSimbolo(css_2.default.CHAVE_ESQUERDA);
|
|
123
|
+
this.avancar();
|
|
124
|
+
break;
|
|
125
|
+
case "}":
|
|
126
|
+
this.adicionarSimbolo(css_2.default.CHAVE_DIREITA);
|
|
127
|
+
this.avancar();
|
|
128
|
+
break;
|
|
129
|
+
case ':':
|
|
130
|
+
this.adicionarSimbolo(css_2.default.DOIS_PONTOS);
|
|
131
|
+
this.avancar();
|
|
132
|
+
break;
|
|
133
|
+
case ';':
|
|
134
|
+
this.adicionarSimbolo(css_2.default.PONTO_E_VIRGULA);
|
|
135
|
+
this.avancar();
|
|
136
|
+
break;
|
|
137
|
+
case ' ':
|
|
138
|
+
case '\0':
|
|
139
|
+
case '\r':
|
|
140
|
+
case '\t':
|
|
141
|
+
case ';':
|
|
142
|
+
this.avancar();
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
if (this.eDigito(caractere))
|
|
146
|
+
this.analisarNumero();
|
|
147
|
+
else if (this.eAlfabeto(caractere))
|
|
148
|
+
this.identificarPalavraChave();
|
|
149
|
+
else {
|
|
150
|
+
this.erros.push({
|
|
151
|
+
linha: this.linha + 1,
|
|
152
|
+
caractere: caractere,
|
|
153
|
+
mensagem: "Caractere inesperado.",
|
|
154
|
+
});
|
|
155
|
+
this.avancar();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
mapear(codigo) {
|
|
160
|
+
this.atual = 0;
|
|
161
|
+
this.linha = 0;
|
|
162
|
+
this.inicioSimbolo = 0;
|
|
163
|
+
this.erros = [];
|
|
164
|
+
this.simbolos = [];
|
|
165
|
+
this.codigo = codigo || [""];
|
|
166
|
+
while (!this.eFinalDoCodigo()) {
|
|
167
|
+
this.inicioSimbolo = this.atual;
|
|
168
|
+
this.analisarToken();
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
simbolos: this.simbolos,
|
|
172
|
+
erros: this.erros
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.LexadorReverso = LexadorReverso;
|
|
177
|
+
//# sourceMappingURL=lexador-reverso.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexador-reverso.js","sourceRoot":"","sources":["../../../fontes/lexador/lexador-reverso.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,9 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.Lexador = void 0;
|
|
7
|
-
const tipos_de_simbolos_1 = __importDefault(require("../tipos-de-simbolos"));
|
|
8
|
-
const palavras_reservadas_1 = __importDefault(require("./palavras-reservadas"));
|
|
9
7
|
const simbolo_1 = require("./simbolo");
|
|
8
|
+
const foles_1 = __importDefault(require("./palavras-reservadas/foles"));
|
|
9
|
+
const foles_2 = __importDefault(require("../tipos-de-simbolos/foles"));
|
|
10
10
|
class Lexador {
|
|
11
11
|
constructor() {
|
|
12
12
|
this.codigo = [""];
|
|
@@ -103,35 +103,35 @@ class Lexador {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
const numeroCompleto = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual);
|
|
106
|
-
this.adicionarSimbolo(
|
|
106
|
+
this.adicionarSimbolo(foles_2.default.NUMERO, parseFloat(numeroCompleto));
|
|
107
107
|
}
|
|
108
108
|
identificarPalavraChave() {
|
|
109
109
|
while (this.eAlfabetoOuDigito(this.simboloAtual())) {
|
|
110
110
|
this.avancar();
|
|
111
111
|
}
|
|
112
112
|
const codigo = this.codigo[this.linha].substring(this.inicioSimbolo, this.atual);
|
|
113
|
-
const tipo = codigo in
|
|
114
|
-
?
|
|
115
|
-
:
|
|
113
|
+
const tipo = codigo in foles_1.default
|
|
114
|
+
? foles_1.default[codigo]
|
|
115
|
+
: foles_2.default.IDENTIFICADOR;
|
|
116
116
|
this.adicionarSimbolo(tipo);
|
|
117
117
|
}
|
|
118
118
|
analisarToken() {
|
|
119
119
|
const caractere = this.simboloAtual();
|
|
120
120
|
switch (caractere) {
|
|
121
121
|
case "{":
|
|
122
|
-
this.adicionarSimbolo(
|
|
122
|
+
this.adicionarSimbolo(foles_2.default.CHAVE_ESQUERDA);
|
|
123
123
|
this.avancar();
|
|
124
124
|
break;
|
|
125
125
|
case "}":
|
|
126
|
-
this.adicionarSimbolo(
|
|
126
|
+
this.adicionarSimbolo(foles_2.default.CHAVE_DIREITA);
|
|
127
127
|
this.avancar();
|
|
128
128
|
break;
|
|
129
129
|
case ':':
|
|
130
|
-
this.adicionarSimbolo(
|
|
130
|
+
this.adicionarSimbolo(foles_2.default.DOIS_PONTOS);
|
|
131
131
|
this.avancar();
|
|
132
132
|
break;
|
|
133
133
|
case ';':
|
|
134
|
-
this.adicionarSimbolo(
|
|
134
|
+
this.adicionarSimbolo(foles_2.default.PONTO_E_VIRGULA);
|
|
135
135
|
this.avancar();
|
|
136
136
|
break;
|
|
137
137
|
case '%':
|
|
@@ -140,7 +140,7 @@ class Lexador {
|
|
|
140
140
|
// Caso contrário, é um quantificador.
|
|
141
141
|
// Verificar se é melhor apenas devolver o símbolo percentual aqui e
|
|
142
142
|
// tratar a situação no avaliador sintático, ou se mais lógica é necessária aqui.
|
|
143
|
-
this.adicionarSimbolo(
|
|
143
|
+
this.adicionarSimbolo(foles_2.default.PERCENTUAL);
|
|
144
144
|
this.avancar();
|
|
145
145
|
break;
|
|
146
146
|
case ' ':
|