@designliquido/foles 0.0.2 → 0.1.1

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.
Files changed (64) hide show
  1. package/README.md +31 -3
  2. package/execucao.js +10 -1
  3. package/execucao.js.map +1 -1
  4. package/fontes/avaliador-sintatico/avaliador-sintatico-reverso.d.ts +18 -0
  5. package/fontes/avaliador-sintatico/avaliador-sintatico-reverso.js +83 -0
  6. package/fontes/avaliador-sintatico/avaliador-sintatico-reverso.js.map +1 -0
  7. package/fontes/avaliador-sintatico/avaliador-sintatico.d.ts +1 -1
  8. package/fontes/avaliador-sintatico/avaliador-sintatico.js +25 -10
  9. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  10. package/fontes/declaracoes/declaracao.d.ts +2 -1
  11. package/fontes/declaracoes/declaracao.js +2 -1
  12. package/fontes/declaracoes/declaracao.js.map +1 -1
  13. package/fontes/foles.d.ts +7 -0
  14. package/fontes/foles.js +16 -0
  15. package/fontes/foles.js.map +1 -1
  16. package/fontes/lexador/lexador-reverso.d.ts +33 -0
  17. package/fontes/lexador/lexador-reverso.js +177 -0
  18. package/fontes/lexador/lexador-reverso.js.map +1 -0
  19. package/fontes/lexador/lexador.d.ts +1 -1
  20. package/fontes/lexador/lexador.js +18 -18
  21. package/fontes/lexador/lexador.js.map +1 -1
  22. package/fontes/lexador/palavras-reservadas/css.d.ts +5 -0
  23. package/fontes/lexador/palavras-reservadas/css.js +11 -0
  24. package/fontes/lexador/palavras-reservadas/css.js.map +1 -0
  25. package/fontes/lexador/{palavras-reservadas.d.ts → palavras-reservadas/foles.d.ts} +0 -0
  26. package/fontes/lexador/palavras-reservadas/foles.js +141 -0
  27. package/fontes/lexador/palavras-reservadas/foles.js.map +1 -0
  28. package/fontes/lexador/palavras-reservadas/index.d.ts +2 -0
  29. package/fontes/lexador/palavras-reservadas/index.js +19 -0
  30. package/fontes/lexador/palavras-reservadas/index.js.map +1 -0
  31. package/fontes/modificadores/dicionario/dicionario-modificadores.js +0 -1
  32. package/fontes/modificadores/dicionario/dicionario-modificadores.js.map +1 -1
  33. package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.d.ts +3 -0
  34. package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.js +10 -0
  35. package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.js.map +1 -0
  36. package/fontes/modificadores/superclasse/seletor-reverso-modificador.d.ts +3 -0
  37. package/fontes/modificadores/superclasse/seletor-reverso-modificador.js +15 -0
  38. package/fontes/modificadores/superclasse/seletor-reverso-modificador.js.map +1 -0
  39. package/fontes/tipos-de-simbolos/css.d.ts +20 -0
  40. package/fontes/tipos-de-simbolos/css.js +22 -0
  41. package/fontes/tipos-de-simbolos/css.js.map +1 -0
  42. package/fontes/{tipos-de-simbolos.d.ts → tipos-de-simbolos/foles.d.ts} +4 -0
  43. package/fontes/{tipos-de-simbolos.js → tipos-de-simbolos/foles.js} +6 -2
  44. package/fontes/tipos-de-simbolos/foles.js.map +1 -0
  45. package/fontes/tipos-de-simbolos/index.d.ts +2 -0
  46. package/fontes/tipos-de-simbolos/index.js +19 -0
  47. package/fontes/tipos-de-simbolos/index.js.map +1 -0
  48. package/fontes/tradutor/estruturas-lmht.d.ts +5 -0
  49. package/fontes/tradutor/estruturas-lmht.js +7 -0
  50. package/fontes/tradutor/estruturas-lmht.js.map +1 -0
  51. package/fontes/tradutor/index.js +6 -1
  52. package/fontes/tradutor/index.js.map +1 -1
  53. package/fontes/tradutor/tradutor-reverso.d.ts +6 -0
  54. package/fontes/tradutor/tradutor-reverso.js +25 -0
  55. package/fontes/tradutor/tradutor-reverso.js.map +1 -0
  56. package/fontes/tradutor/tradutor.d.ts +6 -0
  57. package/fontes/tradutor/tradutor.js +25 -0
  58. package/fontes/tradutor/tradutor.js.map +1 -0
  59. package/package.json +7 -1
  60. package/testes/lexador.test.js +9 -9
  61. package/testes/lexador.test.js.map +1 -1
  62. package/fontes/lexador/palavras-reservadas.js +0 -141
  63. package/fontes/lexador/palavras-reservadas.js.map +0 -1
  64. 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-texto: 12px;
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": ["${workspaceFolder}${pathSeparator}index.ts"],
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-texto | font-size |
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
- foles.converterParaCss(nomeArquivo);
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;IAC1B,KAAK,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;AACxC,CAAC,CAAA;AAED,SAAS,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,7 @@ export declare class AvaliadorSintatico {
11
11
  avancarEDevolverAnterior(): Simbolo;
12
12
  verificarTipoSimboloAtual(tipo: string): boolean;
13
13
  consumir(tipo: string, mensagemDeErro: string): Simbolo;
14
- declaracaoDeclaracao(): Declaracao;
14
+ declaracaoDeclaracao(placeholder?: string): Declaracao;
15
15
  declaracao(): any;
16
16
  analisar(simbolos: Simbolo[]): Declaracao[];
17
17
  }
@@ -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 tipos_de_simbolos_1 = __importDefault(require("../tipos-de-simbolos"));
10
+ const foles_1 = __importDefault(require("../tipos-de-simbolos/foles"));
11
11
  class AvaliadorSintatico {
12
12
  constructor() {
13
13
  this.simbolos = [];
@@ -35,21 +35,31 @@ class AvaliadorSintatico {
35
35
  return this.avancarEDevolverAnterior();
36
36
  throw this.erro(this.simbolos[this.atual], mensagemDeErro);
37
37
  }
38
- declaracaoDeclaracao() {
39
- const simboloSeletor = this.avancarEDevolverAnterior();
40
- this.consumir(tipos_de_simbolos_1.default.CHAVE_ESQUERDA, "Esperado '{' após declaração de seletor.");
38
+ // declaracaoPorSeletor(): Declaracao {
39
+ // // TODO @Vitor: Pensar lógica para seletor de classes.
40
+ // return null;
41
+ // }
42
+ // declaracaoPorEstrutura(): Declaracao {
43
+ // const simboloSeletor = this.avancarEDevolverAnterior();
44
+ // }
45
+ declaracaoDeclaracao(placeholder = null) {
46
+ let simboloSeletor = this.avancarEDevolverAnterior();
47
+ if (placeholder) {
48
+ simboloSeletor = this.avancarEDevolverAnterior();
49
+ }
50
+ this.consumir(foles_1.default.CHAVE_ESQUERDA, "Esperado '{' após declaração de seletor.");
41
51
  const modificadores = [];
42
- while (!this.verificarTipoSimboloAtual(tipos_de_simbolos_1.default.CHAVE_DIREITA)) {
43
- const modificador = this.consumir(tipos_de_simbolos_1.default.IDENTIFICADOR, "Esperado nome do atributo de identificação.");
44
- this.consumir(tipos_de_simbolos_1.default.DOIS_PONTOS, `Esperado ':' após declaração de modificador '${modificador.lexema}'.`);
52
+ while (!this.verificarTipoSimboloAtual(foles_1.default.CHAVE_DIREITA)) {
53
+ const modificador = this.consumir(foles_1.default.IDENTIFICADOR, "Esperado nome do atributo de identificação.");
54
+ this.consumir(foles_1.default.DOIS_PONTOS, `Esperado ':' após declaração de modificador '${modificador.lexema}'.`);
45
55
  const valorModificador = this.avancarEDevolverAnterior();
46
56
  const quantificador = this.avancarEDevolverAnterior();
47
- this.consumir(tipos_de_simbolos_1.default.PONTO_E_VIRGULA, `Esperado ';' após declaração de valor de modificador '${modificador.lexema}'.`);
57
+ this.consumir(foles_1.default.PONTO_E_VIRGULA, `Esperado ';' após declaração de valor de modificador '${modificador.lexema}'.`);
48
58
  const classeModificadora = new superclasse_1.SeletorModificador(modificador.lexema, valorModificador.lexema, quantificador.lexema);
49
59
  modificadores.push(classeModificadora);
50
60
  }
51
61
  this.avancarEDevolverAnterior(); // chave direita
52
- return new declaracoes_1.Declaracao(simboloSeletor.lexema, modificadores);
62
+ return new declaracoes_1.Declaracao(simboloSeletor.lexema, modificadores, placeholder);
53
63
  }
54
64
  declaracao() {
55
65
  if (this.estaNoFinal())
@@ -58,8 +68,13 @@ class AvaliadorSintatico {
58
68
  if (!simboloAtual)
59
69
  return null;
60
70
  switch (simboloAtual.tipo) {
61
- case tipos_de_simbolos_1.default.ESTRUTURA:
71
+ case foles_1.default.ESTRUTURA:
62
72
  return this.declaracaoDeclaracao();
73
+ case foles_1.default.PERCENTUAL:
74
+ return this.declaracaoDeclaracao(simboloAtual.lexema);
75
+ // return this.declaracaoPorEstrutura();
76
+ // case tiposDeSimbolos.IDENTIFICADOR:
77
+ // return this.declaracaoPorSeletor();
63
78
  }
64
79
  }
65
80
  analisar(simbolos) {
@@ -1 +1 @@
1
- {"version":3,"file":"avaliador-sintatico.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avaliador-sintatico.js","sourceRoot":"","sources":["../../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"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"}
@@ -2,5 +2,6 @@ import { Modificador } from "../modificadores";
2
2
  export declare class Declaracao {
3
3
  seletor: string;
4
4
  modificadores: Modificador[];
5
- constructor(seletor: string, modificadores: Modificador[]);
5
+ placeholder?: string;
6
+ constructor(seletor: string, modificadores: Modificador[], placeholder?: string);
6
7
  }
@@ -2,9 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Declaracao = void 0;
4
4
  class Declaracao {
5
- constructor(seletor, modificadores) {
5
+ constructor(seletor, modificadores, placeholder = null) {
6
6
  this.seletor = seletor;
7
7
  this.modificadores = modificadores;
8
+ this.placeholder = placeholder;
8
9
  }
9
10
  }
10
11
  exports.Declaracao = Declaracao;
@@ -1 +1 @@
1
- {"version":3,"file":"declaracao.js","sourceRoot":"","sources":["../../../fontes/declaracoes/declaracao.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAInB,YAAY,OAAe,EAAE,aAA4B;QACrD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACvC,CAAC;CACJ;AARD,gCAQC"}
1
+ {"version":3,"file":"declaracao.js","sourceRoot":"","sources":["../../../fontes/declaracoes/declaracao.ts"],"names":[],"mappings":";;;AAEA,MAAa,UAAU;IAKnB,YAAY,OAAe,EAAE,aAA4B,EAAE,cAAsB,IAAI;QACjF,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;CACJ;AAVD,gCAUC"}
package/fontes/foles.d.ts CHANGED
@@ -1,10 +1,17 @@
1
1
  import { AvaliadorSintatico } from "./avaliador-sintatico";
2
+ import { AvaliadorSintaticoReverso } from './avaliador-sintatico/avaliador-sintatico-reverso';
2
3
  import { Lexador } from "./lexador";
4
+ import { LexadorReverso } from './lexador/lexador-reverso';
3
5
  import { Tradutor } from "./tradutor";
6
+ import { TradutorReverso } from './tradutor/tradutor-reverso';
4
7
  export declare class FolEs {
5
8
  lexador: Lexador;
9
+ lexadorReverso: LexadorReverso;
6
10
  avaliadorSintatico: AvaliadorSintatico;
11
+ avaliadorSintaticoReverso: AvaliadorSintaticoReverso;
7
12
  tradutor: Tradutor;
13
+ tradutorReverso: TradutorReverso;
8
14
  constructor();
9
15
  converterParaCss(nomeArquivo: string): void;
16
+ converterParaFolEs(nomeArquivo: string): string;
10
17
  }
package/fontes/foles.js CHANGED
@@ -26,13 +26,19 @@ 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");
33
+ const tradutor_reverso_1 = require("./tradutor/tradutor-reverso");
31
34
  class FolEs {
32
35
  constructor() {
33
36
  this.lexador = new lexador_1.Lexador();
37
+ this.lexadorReverso = new lexador_reverso_1.LexadorReverso();
34
38
  this.avaliadorSintatico = new avaliador_sintatico_1.AvaliadorSintatico();
39
+ this.avaliadorSintaticoReverso = new avaliador_sintatico_reverso_1.AvaliadorSintaticoReverso();
35
40
  this.tradutor = new tradutor_1.Tradutor();
41
+ this.tradutorReverso = new tradutor_reverso_1.TradutorReverso();
36
42
  }
37
43
  converterParaCss(nomeArquivo) {
38
44
  const dadosDoArquivo = arquivos.readFileSync(nomeArquivo);
@@ -44,6 +50,16 @@ class FolEs {
44
50
  const traducao = this.tradutor.traduzir(resultadoAvaliadorSintatico);
45
51
  console.log(traducao);
46
52
  }
53
+ converterParaFolEs(nomeArquivo) {
54
+ const dadosDoArquivo = arquivos.readFileSync(nomeArquivo);
55
+ const conteudoDoArquivo = dadosDoArquivo
56
+ .toString()
57
+ .split('\n');
58
+ const resultadoLexadorReverso = this.lexadorReverso.mapear(conteudoDoArquivo);
59
+ const resultadoAvaliadorSintaticoReverso = this.avaliadorSintaticoReverso.analisar(resultadoLexadorReverso.simbolos);
60
+ const traducaoReversa = this.tradutorReverso.traduzir(resultadoAvaliadorSintaticoReverso);
61
+ return traducaoReversa;
62
+ }
47
63
  }
48
64
  exports.FolEs = FolEs;
49
65
  //# sourceMappingURL=foles.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"foles.js","sourceRoot":"","sources":["../../fontes/foles.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,6CAA+B;AAE/B,+DAA2D;AAC3D,uCAAoC;AACpC,yCAAsC;AAEtC,MAAa,KAAK;IAKd;QACI,IAAI,CAAC,OAAO,GAAG,IAAI,iBAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,wCAAkB,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IACnC,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;CACJ;AAtBD,sBAsBC"}
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,yCAAsC;AACtC,kEAA8D;AAE9D,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,kCAAe,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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"}
@@ -22,7 +22,7 @@ export declare class Lexador {
22
22
  eDigito(caractere: string): boolean;
23
23
  eAlfabetoOuDigito(caractere: any): boolean;
24
24
  avancar(): void;
25
- adicionarSimbolo(tipo: any, literal?: any): void;
25
+ adicionarSimbolo(tipo: any, literal?: any, lexema?: string): void;
26
26
  analisarNumero(): void;
27
27
  identificarPalavraChave(): void;
28
28
  analisarToken(): void;