@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.
Files changed (61) 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 +2 -1
  8. package/fontes/avaliador-sintatico/avaliador-sintatico.js +15 -9
  9. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  10. package/fontes/foles.d.ts +7 -1
  11. package/fontes/foles.js +15 -0
  12. package/fontes/foles.js.map +1 -1
  13. package/fontes/lexador/lexador-reverso.d.ts +33 -0
  14. package/fontes/lexador/lexador-reverso.js +177 -0
  15. package/fontes/lexador/lexador-reverso.js.map +1 -0
  16. package/fontes/lexador/lexador.js +11 -11
  17. package/fontes/lexador/lexador.js.map +1 -1
  18. package/fontes/lexador/palavras-reservadas/css.d.ts +5 -0
  19. package/fontes/lexador/palavras-reservadas/css.js +11 -0
  20. package/fontes/lexador/palavras-reservadas/css.js.map +1 -0
  21. package/fontes/lexador/{palavras-reservadas.d.ts → palavras-reservadas/foles.d.ts} +0 -0
  22. package/fontes/lexador/palavras-reservadas/foles.js +141 -0
  23. package/fontes/lexador/palavras-reservadas/foles.js.map +1 -0
  24. package/fontes/lexador/palavras-reservadas/index.d.ts +2 -0
  25. package/fontes/lexador/palavras-reservadas/index.js +19 -0
  26. package/fontes/lexador/palavras-reservadas/index.js.map +1 -0
  27. package/fontes/modificadores/dicionario/dicionario-modificadores.js +0 -1
  28. package/fontes/modificadores/dicionario/dicionario-modificadores.js.map +1 -1
  29. package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.d.ts +3 -0
  30. package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.js +10 -0
  31. package/fontes/modificadores/dicionario/dicionario-reverso-modificadores.js.map +1 -0
  32. package/fontes/modificadores/superclasse/seletor-reverso-modificador.d.ts +3 -0
  33. package/fontes/modificadores/superclasse/seletor-reverso-modificador.js +15 -0
  34. package/fontes/modificadores/superclasse/seletor-reverso-modificador.js.map +1 -0
  35. package/fontes/tipos-de-simbolos/css.d.ts +20 -0
  36. package/fontes/tipos-de-simbolos/css.js +22 -0
  37. package/fontes/tipos-de-simbolos/css.js.map +1 -0
  38. package/fontes/{tipos-de-simbolos.d.ts → tipos-de-simbolos/foles.d.ts} +4 -0
  39. package/fontes/{tipos-de-simbolos.js → tipos-de-simbolos/foles.js} +6 -2
  40. package/fontes/tipos-de-simbolos/foles.js.map +1 -0
  41. package/fontes/tipos-de-simbolos/index.d.ts +2 -0
  42. package/fontes/tipos-de-simbolos/index.js +19 -0
  43. package/fontes/tipos-de-simbolos/index.js.map +1 -0
  44. package/fontes/tradutor/estruturas-lmht.d.ts +5 -0
  45. package/fontes/tradutor/estruturas-lmht.js +7 -0
  46. package/fontes/tradutor/estruturas-lmht.js.map +1 -0
  47. package/fontes/tradutor/index.d.ts +2 -6
  48. package/fontes/tradutor/index.js +15 -21
  49. package/fontes/tradutor/index.js.map +1 -1
  50. package/fontes/tradutor/tradutor-reverso.d.ts +6 -0
  51. package/fontes/tradutor/tradutor-reverso.js +25 -0
  52. package/fontes/tradutor/tradutor-reverso.js.map +1 -0
  53. package/fontes/tradutor/tradutor.d.ts +6 -0
  54. package/fontes/tradutor/tradutor.js +25 -0
  55. package/fontes/tradutor/tradutor.js.map +1 -0
  56. package/package.json +2 -2
  57. package/testes/lexador.test.js +9 -9
  58. package/testes/lexador.test.js.map +1 -1
  59. package/fontes/lexador/palavras-reservadas.js +0 -141
  60. package/fontes/lexador/palavras-reservadas.js.map +0 -1
  61. 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,8 @@ 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
+ 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 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,16 +35,20 @@ class AvaliadorSintatico {
35
35
  return this.avancarEDevolverAnterior();
36
36
  throw this.erro(this.simbolos[this.atual], mensagemDeErro);
37
37
  }
38
- declaracaoDeclaracao() {
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(tipos_de_simbolos_1.default.CHAVE_ESQUERDA, "Esperado '{' após declaração de seletor.");
44
+ this.consumir(foles_1.default.CHAVE_ESQUERDA, "Esperado '{' após declaração de seletor.");
41
45
  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}'.`);
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(tipos_de_simbolos_1.default.PONTO_E_VIRGULA, `Esperado ';' após declaração de valor de modificador '${modificador.lexema}'.`);
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 tipos_de_simbolos_1.default.ESTRUTURA:
62
- return this.declaracaoDeclaracao();
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":"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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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"}
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 { Tradutor } from "./tradutor";
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
@@ -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,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(tipos_de_simbolos_1.default.NUMERO, parseFloat(numeroCompleto));
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 palavras_reservadas_1.default
114
- ? palavras_reservadas_1.default[codigo]
115
- : tipos_de_simbolos_1.default.IDENTIFICADOR;
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(tipos_de_simbolos_1.default.CHAVE_ESQUERDA);
122
+ this.adicionarSimbolo(foles_2.default.CHAVE_ESQUERDA);
123
123
  this.avancar();
124
124
  break;
125
125
  case "}":
126
- this.adicionarSimbolo(tipos_de_simbolos_1.default.CHAVE_DIREITA);
126
+ this.adicionarSimbolo(foles_2.default.CHAVE_DIREITA);
127
127
  this.avancar();
128
128
  break;
129
129
  case ':':
130
- this.adicionarSimbolo(tipos_de_simbolos_1.default.DOIS_PONTOS);
130
+ this.adicionarSimbolo(foles_2.default.DOIS_PONTOS);
131
131
  this.avancar();
132
132
  break;
133
133
  case ';':
134
- this.adicionarSimbolo(tipos_de_simbolos_1.default.PONTO_E_VIRGULA);
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(tipos_de_simbolos_1.default.PERCENTUAL);
143
+ this.adicionarSimbolo(foles_2.default.PERCENTUAL);
144
144
  this.avancar();
145
145
  break;
146
146
  case ' ':