@designliquido/delegua 0.9.3 → 0.9.5

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 (235) hide show
  1. package/README.md +25 -3
  2. package/bin/delegua +1 -1
  3. package/bin/delegua.cmd +1 -1
  4. package/bin/package.json +7 -5
  5. package/coverage/lcov-report/sorter.js +4 -4
  6. package/coverage/lcov-report/sorter.js.map +1 -1
  7. package/execucao.d.ts +1 -0
  8. package/execucao.js +29 -0
  9. package/execucao.js.map +1 -0
  10. package/fontes/avaliador-sintatico/avaliador-sintatico-base.js +108 -105
  11. package/fontes/avaliador-sintatico/avaliador-sintatico-base.js.map +1 -1
  12. package/fontes/avaliador-sintatico/avaliador-sintatico.js +226 -232
  13. package/fontes/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  14. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js +35 -55
  15. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-birl.js.map +1 -1
  16. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js +211 -216
  17. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-egua-classico.js.map +1 -1
  18. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js +231 -237
  19. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-eguap.js.map +1 -1
  20. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.d.ts +3 -0
  21. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js +188 -121
  22. package/fontes/avaliador-sintatico/dialetos/avaliador-sintatico-visualg.js.map +1 -1
  23. package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js +6 -24
  24. package/fontes/avaliador-sintatico/erro-avaliador-sintatico.js.map +1 -1
  25. package/fontes/bibliotecas/biblioteca-global.js +206 -367
  26. package/fontes/bibliotecas/biblioteca-global.js.map +1 -1
  27. package/fontes/bibliotecas/importar-biblioteca.js +28 -29
  28. package/fontes/bibliotecas/importar-biblioteca.js.map +1 -1
  29. package/fontes/bibliotecas/primitivas-texto.js +9 -22
  30. package/fontes/bibliotecas/primitivas-texto.js.map +1 -1
  31. package/fontes/bibliotecas/primitivas-vetor.js +12 -14
  32. package/fontes/bibliotecas/primitivas-vetor.js.map +1 -1
  33. package/fontes/construtos/acesso-indice-variavel.js +6 -50
  34. package/fontes/construtos/acesso-indice-variavel.js.map +1 -1
  35. package/fontes/construtos/acesso-metodo.js +6 -50
  36. package/fontes/construtos/acesso-metodo.js.map +1 -1
  37. package/fontes/construtos/agrupamento.js +6 -50
  38. package/fontes/construtos/agrupamento.js.map +1 -1
  39. package/fontes/construtos/atribuicao-sobrescrita.js +6 -50
  40. package/fontes/construtos/atribuicao-sobrescrita.js.map +1 -1
  41. package/fontes/construtos/atribuir.js +6 -50
  42. package/fontes/construtos/atribuir.js.map +1 -1
  43. package/fontes/construtos/binario.js +6 -50
  44. package/fontes/construtos/binario.js.map +1 -1
  45. package/fontes/construtos/chamada.js +6 -50
  46. package/fontes/construtos/chamada.js.map +1 -1
  47. package/fontes/construtos/definir-valor.js +6 -50
  48. package/fontes/construtos/definir-valor.js.map +1 -1
  49. package/fontes/construtos/dicionario.js +6 -50
  50. package/fontes/construtos/dicionario.js.map +1 -1
  51. package/fontes/construtos/funcao.d.ts +2 -2
  52. package/fontes/construtos/funcao.js +6 -47
  53. package/fontes/construtos/funcao.js.map +1 -1
  54. package/fontes/construtos/isto.js +6 -47
  55. package/fontes/construtos/isto.js.map +1 -1
  56. package/fontes/construtos/literal.js +6 -47
  57. package/fontes/construtos/literal.js.map +1 -1
  58. package/fontes/construtos/logico.js +6 -50
  59. package/fontes/construtos/logico.js.map +1 -1
  60. package/fontes/construtos/super.js +6 -47
  61. package/fontes/construtos/super.js.map +1 -1
  62. package/fontes/construtos/unario.js +6 -50
  63. package/fontes/construtos/unario.js.map +1 -1
  64. package/fontes/construtos/variavel.js +6 -47
  65. package/fontes/construtos/variavel.js.map +1 -1
  66. package/fontes/construtos/vetor.js +6 -50
  67. package/fontes/construtos/vetor.js.map +1 -1
  68. package/fontes/declaracoes/bloco.js +9 -70
  69. package/fontes/declaracoes/bloco.js.map +1 -1
  70. package/fontes/declaracoes/classe.js +11 -72
  71. package/fontes/declaracoes/classe.js.map +1 -1
  72. package/fontes/declaracoes/continua.js +8 -65
  73. package/fontes/declaracoes/continua.js.map +1 -1
  74. package/fontes/declaracoes/declaracao.js +6 -47
  75. package/fontes/declaracoes/declaracao.js.map +1 -1
  76. package/fontes/declaracoes/enquanto.js +10 -71
  77. package/fontes/declaracoes/enquanto.js.map +1 -1
  78. package/fontes/declaracoes/escolha.js +11 -72
  79. package/fontes/declaracoes/escolha.js.map +1 -1
  80. package/fontes/declaracoes/escreva.js +9 -70
  81. package/fontes/declaracoes/escreva.js.map +1 -1
  82. package/fontes/declaracoes/expressao.js +9 -70
  83. package/fontes/declaracoes/expressao.js.map +1 -1
  84. package/fontes/declaracoes/fazer.js +10 -71
  85. package/fontes/declaracoes/fazer.js.map +1 -1
  86. package/fontes/declaracoes/funcao.js +10 -68
  87. package/fontes/declaracoes/funcao.js.map +1 -1
  88. package/fontes/declaracoes/importar.js +10 -71
  89. package/fontes/declaracoes/importar.js.map +1 -1
  90. package/fontes/declaracoes/leia.js +9 -70
  91. package/fontes/declaracoes/leia.js.map +1 -1
  92. package/fontes/declaracoes/para.js +12 -73
  93. package/fontes/declaracoes/para.js.map +1 -1
  94. package/fontes/declaracoes/retorna.js +10 -71
  95. package/fontes/declaracoes/retorna.js.map +1 -1
  96. package/fontes/declaracoes/se.js +12 -73
  97. package/fontes/declaracoes/se.js.map +1 -1
  98. package/fontes/declaracoes/sustar.js +8 -65
  99. package/fontes/declaracoes/sustar.js.map +1 -1
  100. package/fontes/declaracoes/tente.js +12 -73
  101. package/fontes/declaracoes/tente.js.map +1 -1
  102. package/fontes/declaracoes/var.js +10 -71
  103. package/fontes/declaracoes/var.js.map +1 -1
  104. package/fontes/delegua.js +117 -200
  105. package/fontes/delegua.js.map +1 -1
  106. package/fontes/depuracao/cyrb53.js +3 -4
  107. package/fontes/depuracao/cyrb53.js.map +1 -1
  108. package/fontes/depuracao/servidor-depuracao.js +125 -209
  109. package/fontes/depuracao/servidor-depuracao.js.map +1 -1
  110. package/fontes/espaco-variaveis.js +3 -4
  111. package/fontes/espaco-variaveis.js.map +1 -1
  112. package/fontes/estruturas/chamavel.js +6 -9
  113. package/fontes/estruturas/chamavel.js.map +1 -1
  114. package/fontes/estruturas/classe-padrao.js +17 -35
  115. package/fontes/estruturas/classe-padrao.js.map +1 -1
  116. package/fontes/estruturas/delegua-classe.d.ts +2 -2
  117. package/fontes/estruturas/delegua-classe.js +21 -39
  118. package/fontes/estruturas/delegua-classe.js.map +1 -1
  119. package/fontes/estruturas/delegua-funcao.js +48 -114
  120. package/fontes/estruturas/delegua-funcao.js.map +1 -1
  121. package/fontes/estruturas/funcao-padrao.js +13 -75
  122. package/fontes/estruturas/funcao-padrao.js.map +1 -1
  123. package/fontes/estruturas/metodo-primitiva.js +11 -39
  124. package/fontes/estruturas/metodo-primitiva.js.map +1 -1
  125. package/fontes/estruturas/modulo.js +6 -7
  126. package/fontes/estruturas/modulo.js.map +1 -1
  127. package/fontes/estruturas/objeto-delegua-classe.d.ts +3 -3
  128. package/fontes/estruturas/objeto-delegua-classe.js +12 -13
  129. package/fontes/estruturas/objeto-delegua-classe.js.map +1 -1
  130. package/fontes/estruturas/objeto-padrao.js +9 -11
  131. package/fontes/estruturas/objeto-padrao.js.map +1 -1
  132. package/fontes/excecoes/erro-em-tempo-de-execucao.js +8 -26
  133. package/fontes/excecoes/erro-em-tempo-de-execucao.js.map +1 -1
  134. package/fontes/importador/importador.js +21 -22
  135. package/fontes/importador/importador.js.map +1 -1
  136. package/fontes/interfaces/parametro-interface.d.ts +1 -1
  137. package/fontes/interpretador/dialetos/egua-classico.js +592 -1019
  138. package/fontes/interpretador/dialetos/egua-classico.js.map +1 -1
  139. package/fontes/interpretador/inferenciador.js +1 -1
  140. package/fontes/interpretador/inferenciador.js.map +1 -1
  141. package/fontes/interpretador/interpretador-com-depuracao.js +186 -336
  142. package/fontes/interpretador/interpretador-com-depuracao.js.map +1 -1
  143. package/fontes/interpretador/interpretador.js +706 -1175
  144. package/fontes/interpretador/interpretador.js.map +1 -1
  145. package/fontes/interpretador/pilha-escopos-execucao.js +52 -57
  146. package/fontes/interpretador/pilha-escopos-execucao.js.map +1 -1
  147. package/fontes/lexador/dialetos/lexador-birl.d.ts +1 -0
  148. package/fontes/lexador/dialetos/lexador-birl.js +55 -64
  149. package/fontes/lexador/dialetos/lexador-birl.js.map +1 -1
  150. package/fontes/lexador/dialetos/lexador-egua-classico.js +43 -46
  151. package/fontes/lexador/dialetos/lexador-egua-classico.js.map +1 -1
  152. package/fontes/lexador/dialetos/lexador-eguap.js +59 -63
  153. package/fontes/lexador/dialetos/lexador-eguap.js.map +1 -1
  154. package/fontes/lexador/dialetos/lexador-visualg.js +45 -54
  155. package/fontes/lexador/dialetos/lexador-visualg.js.map +1 -1
  156. package/fontes/lexador/dialetos/palavras-reservadas/birl.js +1 -1
  157. package/fontes/lexador/dialetos/palavras-reservadas/birl.js.map +1 -1
  158. package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js +1 -1
  159. package/fontes/lexador/dialetos/palavras-reservadas/egua-classico.js.map +1 -1
  160. package/fontes/lexador/dialetos/palavras-reservadas/visualg.d.ts +24 -0
  161. package/fontes/lexador/dialetos/palavras-reservadas/visualg.js +25 -1
  162. package/fontes/lexador/dialetos/palavras-reservadas/visualg.js.map +1 -1
  163. package/fontes/lexador/lexador-base-linha-unica.js +28 -29
  164. package/fontes/lexador/lexador-base-linha-unica.js.map +1 -1
  165. package/fontes/lexador/lexador.js +53 -57
  166. package/fontes/lexador/lexador.js.map +1 -1
  167. package/fontes/lexador/palavras-reservadas.js +1 -1
  168. package/fontes/lexador/palavras-reservadas.js.map +1 -1
  169. package/fontes/lexador/simbolo.js +5 -6
  170. package/fontes/lexador/simbolo.js.map +1 -1
  171. package/fontes/quebras/index.js +11 -42
  172. package/fontes/quebras/index.js.map +1 -1
  173. package/fontes/resolvedor/dialetos/egua-classico.js +143 -144
  174. package/fontes/resolvedor/dialetos/egua-classico.js.map +1 -1
  175. package/fontes/resolvedor/erro-resolvedor.js +6 -24
  176. package/fontes/resolvedor/erro-resolvedor.js.map +1 -1
  177. package/fontes/resolvedor/pilha-escopos.js +11 -12
  178. package/fontes/resolvedor/pilha-escopos.js.map +1 -1
  179. package/fontes/tipos-de-simbolos/birl.d.ts +1 -0
  180. package/fontes/tipos-de-simbolos/birl.js +1 -0
  181. package/fontes/tipos-de-simbolos/birl.js.map +1 -1
  182. package/fontes/tipos-de-simbolos/comum.d.ts +2 -0
  183. package/fontes/tipos-de-simbolos/comum.js +2 -0
  184. package/fontes/tipos-de-simbolos/comum.js.map +1 -1
  185. package/fontes/tipos-de-simbolos/visualg.d.ts +9 -0
  186. package/fontes/tipos-de-simbolos/visualg.js +9 -0
  187. package/fontes/tipos-de-simbolos/visualg.js.map +1 -1
  188. package/index.d.ts +4 -0
  189. package/index.js +4 -26
  190. package/index.js.map +1 -1
  191. package/jest.config.js +9 -47
  192. package/jest.config.js.map +1 -1
  193. package/package.json +7 -5
  194. package/testes/__mocks__/estatistica.js +1 -1
  195. package/testes/__mocks__/estatistica.js.map +1 -1
  196. package/testes/__mocks__/fisica.js +1 -1
  197. package/testes/__mocks__/fisica.js.map +1 -1
  198. package/testes/__mocks__/matematica.js +1 -1
  199. package/testes/__mocks__/matematica.js.map +1 -1
  200. package/testes/avaliador-sintatico.test.js +27 -27
  201. package/testes/avaliador-sintatico.test.js.map +1 -1
  202. package/testes/biblioteca-global.test.js +197 -440
  203. package/testes/biblioteca-global.test.js.map +1 -1
  204. package/testes/birl/avaliador-sintatico.test.js +8 -8
  205. package/testes/birl/avaliador-sintatico.test.js.map +1 -1
  206. package/testes/birl/lexador.test.js +10 -10
  207. package/testes/birl/lexador.test.js.map +1 -1
  208. package/testes/delegua.test.js +7 -7
  209. package/testes/delegua.test.js.map +1 -1
  210. package/testes/egua-classico/avaliador-sintatico.test.js +14 -14
  211. package/testes/egua-classico/avaliador-sintatico.test.js.map +1 -1
  212. package/testes/egua-classico/delegua.test.js +5 -5
  213. package/testes/egua-classico/delegua.test.js.map +1 -1
  214. package/testes/egua-classico/interpretador.test.js +180 -396
  215. package/testes/egua-classico/interpretador.test.js.map +1 -1
  216. package/testes/egua-classico/lexador.test.js +23 -23
  217. package/testes/egua-classico/lexador.test.js.map +1 -1
  218. package/testes/egua-classico/resolvedor.test.js +12 -12
  219. package/testes/egua-classico/resolvedor.test.js.map +1 -1
  220. package/testes/eguap/avaliador-sintatico.test.js +11 -11
  221. package/testes/eguap/avaliador-sintatico.test.js.map +1 -1
  222. package/testes/eguap/interpretador.test.js +189 -405
  223. package/testes/eguap/interpretador.test.js.map +1 -1
  224. package/testes/eguap/lexador.test.js +18 -18
  225. package/testes/eguap/lexador.test.js.map +1 -1
  226. package/testes/interpretador.test.js +431 -908
  227. package/testes/interpretador.test.js.map +1 -1
  228. package/testes/lexador.test.js +42 -42
  229. package/testes/lexador.test.js.map +1 -1
  230. package/testes/visualg/avaliador-sintatico.test.js +23 -23
  231. package/testes/visualg/avaliador-sintatico.test.js.map +1 -1
  232. package/testes/visualg/interpretador.test.js +16 -61
  233. package/testes/visualg/interpretador.test.js.map +1 -1
  234. package/testes/visualg/lexador.test.js +15 -15
  235. package/testes/visualg/lexador.test.js.map +1 -1
@@ -4,86 +4,81 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.AvaliadorSintatico = void 0;
7
- var delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
8
- var browser_process_hrtime_1 = __importDefault(require("browser-process-hrtime"));
9
- var construtos_1 = require("../construtos");
10
- var erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
11
- var declaracoes_1 = require("../declaracoes");
7
+ const delegua_1 = __importDefault(require("../tipos-de-simbolos/delegua"));
8
+ const browser_process_hrtime_1 = __importDefault(require("browser-process-hrtime"));
9
+ const construtos_1 = require("../construtos");
10
+ const erro_avaliador_sintatico_1 = require("./erro-avaliador-sintatico");
11
+ const declaracoes_1 = require("../declaracoes");
12
12
  /**
13
13
  * O avaliador sintático (Parser) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
14
14
  * Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
15
15
  * Há dois grupos de estruturas de alto nível: Construtos e Declarações.
16
16
  */
17
- var AvaliadorSintatico = /** @class */ (function () {
18
- function AvaliadorSintatico(performance) {
19
- if (performance === void 0) { performance = false; }
17
+ class AvaliadorSintatico {
18
+ constructor(performance = false) {
20
19
  this.hashArquivo = 0;
21
20
  this.atual = 0;
22
21
  this.blocos = 0;
23
22
  this.erros = [];
24
23
  this.performance = performance;
25
24
  }
26
- AvaliadorSintatico.prototype.erro = function (simbolo, mensagemDeErro) {
27
- var excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
25
+ erro(simbolo, mensagemDeErro) {
26
+ const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(simbolo, mensagemDeErro);
28
27
  this.erros.push(excecao);
29
28
  return excecao;
30
- };
31
- AvaliadorSintatico.prototype.consumir = function (tipo, mensagemDeErro) {
29
+ }
30
+ consumir(tipo, mensagemDeErro) {
32
31
  if (this.verificarTipoSimboloAtual(tipo))
33
32
  return this.avancarEDevolverAnterior();
34
33
  throw this.erro(this.simbolos[this.atual], mensagemDeErro);
35
- };
36
- AvaliadorSintatico.prototype.verificarTipoSimboloAtual = function (tipo) {
34
+ }
35
+ verificarTipoSimboloAtual(tipo) {
37
36
  if (this.estaNoFinal())
38
37
  return false;
39
38
  return this.simbolos[this.atual].tipo === tipo;
40
- };
41
- AvaliadorSintatico.prototype.verificarTipoProximoSimbolo = function (tipo) {
39
+ }
40
+ verificarTipoProximoSimbolo(tipo) {
42
41
  return this.simbolos[this.atual + 1].tipo === tipo;
43
- };
44
- AvaliadorSintatico.prototype.simboloAtual = function () {
42
+ }
43
+ simboloAtual() {
45
44
  return this.simbolos[this.atual];
46
- };
47
- AvaliadorSintatico.prototype.simboloAnterior = function () {
45
+ }
46
+ simboloAnterior() {
48
47
  return this.simbolos[this.atual - 1];
49
- };
50
- AvaliadorSintatico.prototype.estaNoFinal = function () {
48
+ }
49
+ estaNoFinal() {
51
50
  return this.atual === this.simbolos.length;
52
- };
53
- AvaliadorSintatico.prototype.avancarEDevolverAnterior = function () {
51
+ }
52
+ avancarEDevolverAnterior() {
54
53
  if (!this.estaNoFinal())
55
54
  this.atual += 1;
56
55
  return this.simbolos[this.atual - 1];
57
- };
58
- AvaliadorSintatico.prototype.verificarSeSimboloAtualEIgualA = function () {
59
- var argumentos = [];
60
- for (var _i = 0; _i < arguments.length; _i++) {
61
- argumentos[_i] = arguments[_i];
62
- }
63
- for (var i = 0; i < argumentos.length; i++) {
64
- var tipoAtual = argumentos[i];
56
+ }
57
+ verificarSeSimboloAtualEIgualA(...argumentos) {
58
+ for (let i = 0; i < argumentos.length; i++) {
59
+ const tipoAtual = argumentos[i];
65
60
  if (this.verificarTipoSimboloAtual(tipoAtual)) {
66
61
  this.avancarEDevolverAnterior();
67
62
  return true;
68
63
  }
69
64
  }
70
65
  return false;
71
- };
72
- AvaliadorSintatico.prototype.primario = function () {
73
- var simboloAtual = this.simbolos[this.atual];
66
+ }
67
+ primario() {
68
+ const simboloAtual = this.simbolos[this.atual];
74
69
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SUPER)) {
75
- var simboloChave = this.simbolos[this.atual - 1];
70
+ const simboloChave = this.simbolos[this.atual - 1];
76
71
  this.consumir(delegua_1.default.PONTO, "Esperado '.' após 'super'.");
77
- var metodo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome do método da SuperClasse.');
72
+ const metodo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome do método da SuperClasse.');
78
73
  return new construtos_1.Super(this.hashArquivo, simboloChave, metodo);
79
74
  }
80
75
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_ESQUERDO)) {
81
- var valores = [];
76
+ const valores = [];
82
77
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_DIREITO)) {
83
78
  return new construtos_1.Vetor(this.hashArquivo, Number(simboloAtual.linha), []);
84
79
  }
85
80
  while (!this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_DIREITO)) {
86
- var valor = this.atribuir();
81
+ const valor = this.atribuir();
87
82
  valores.push(valor);
88
83
  if (this.simbolos[this.atual].tipo !== delegua_1.default.COLCHETE_DIREITO) {
89
84
  this.consumir(delegua_1.default.VIRGULA, 'Esperado vírgula antes da próxima expressão.');
@@ -92,15 +87,15 @@ var AvaliadorSintatico = /** @class */ (function () {
92
87
  return new construtos_1.Vetor(this.hashArquivo, Number(simboloAtual.linha), valores);
93
88
  }
94
89
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_ESQUERDA)) {
95
- var chaves = [];
96
- var valores = [];
90
+ const chaves = [];
91
+ const valores = [];
97
92
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_DIREITA)) {
98
93
  return new construtos_1.Dicionario(this.hashArquivo, Number(simboloAtual.linha), [], []);
99
94
  }
100
95
  while (!this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_DIREITA)) {
101
- var chave = this.atribuir();
96
+ const chave = this.atribuir();
102
97
  this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' entre chave e valor.");
103
- var valor = this.atribuir();
98
+ const valor = this.atribuir();
104
99
  chaves.push(chave);
105
100
  valores.push(valor);
106
101
  if (this.simbolos[this.atual].tipo !== delegua_1.default.CHAVE_DIREITA) {
@@ -120,23 +115,23 @@ var AvaliadorSintatico = /** @class */ (function () {
120
115
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.ISTO))
121
116
  return new construtos_1.Isto(this.hashArquivo, Number(simboloAtual.linha), this.simbolos[this.atual - 1]);
122
117
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.NUMERO, delegua_1.default.TEXTO)) {
123
- var simboloAnterior = this.simbolos[this.atual - 1];
118
+ const simboloAnterior = this.simbolos[this.atual - 1];
124
119
  return new construtos_1.Literal(this.hashArquivo, Number(simboloAnterior.linha), simboloAnterior.literal);
125
120
  }
126
121
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IDENTIFICADOR)) {
127
122
  return new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1]);
128
123
  }
129
124
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PARENTESE_ESQUERDO)) {
130
- var expressao = this.expressao();
125
+ const expressao = this.expressao();
131
126
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após a expressão.");
132
127
  return new construtos_1.Agrupamento(this.hashArquivo, Number(simboloAtual.linha), expressao);
133
128
  }
134
129
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IMPORTAR))
135
130
  return this.declaracaoImportar();
136
131
  throw this.erro(this.simbolos[this.atual], 'Esperado expressão.');
137
- };
138
- AvaliadorSintatico.prototype.finalizarChamada = function (entidadeChamada) {
139
- var argumentos = [];
132
+ }
133
+ finalizarChamada(entidadeChamada) {
134
+ const argumentos = [];
140
135
  if (!this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_DIREITO)) {
141
136
  do {
142
137
  if (argumentos.length >= 255) {
@@ -145,22 +140,22 @@ var AvaliadorSintatico = /** @class */ (function () {
145
140
  argumentos.push(this.expressao());
146
141
  } while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
147
142
  }
148
- var parenteseDireito = this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
143
+ const parenteseDireito = this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os argumentos.");
149
144
  return new construtos_1.Chamada(this.hashArquivo, entidadeChamada, parenteseDireito, argumentos);
150
- };
151
- AvaliadorSintatico.prototype.chamar = function () {
152
- var expressao = this.primario();
145
+ }
146
+ chamar() {
147
+ let expressao = this.primario();
153
148
  while (true) {
154
149
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PARENTESE_ESQUERDO)) {
155
150
  expressao = this.finalizarChamada(expressao);
156
151
  }
157
152
  else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO)) {
158
- var nome = this.consumir(delegua_1.default.IDENTIFICADOR, "Esperado nome do método após '.'.");
153
+ const nome = this.consumir(delegua_1.default.IDENTIFICADOR, "Esperado nome do método após '.'.");
159
154
  expressao = new construtos_1.AcessoMetodo(this.hashArquivo, expressao, nome);
160
155
  }
161
156
  else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.COLCHETE_ESQUERDO)) {
162
- var indice = this.expressao();
163
- var simboloFechamento = this.consumir(delegua_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
157
+ const indice = this.expressao();
158
+ const simboloFechamento = this.consumir(delegua_1.default.COLCHETE_DIREITO, "Esperado ']' após escrita do indice.");
164
159
  expressao = new construtos_1.AcessoIndiceVariavel(this.hashArquivo, expressao, indice, simboloFechamento);
165
160
  }
166
161
  else {
@@ -168,125 +163,125 @@ var AvaliadorSintatico = /** @class */ (function () {
168
163
  }
169
164
  }
170
165
  return expressao;
171
- };
172
- AvaliadorSintatico.prototype.unario = function () {
166
+ }
167
+ unario() {
173
168
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.NEGACAO, delegua_1.default.SUBTRACAO, delegua_1.default.BIT_NOT)) {
174
- var operador = this.simbolos[this.atual - 1];
175
- var direito = this.unario();
169
+ const operador = this.simbolos[this.atual - 1];
170
+ const direito = this.unario();
176
171
  return new construtos_1.Unario(this.hashArquivo, operador, direito);
177
172
  }
178
173
  return this.chamar();
179
- };
180
- AvaliadorSintatico.prototype.exponenciacao = function () {
181
- var expressao = this.unario();
174
+ }
175
+ exponenciacao() {
176
+ let expressao = this.unario();
182
177
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.EXPONENCIACAO)) {
183
- var operador = this.simbolos[this.atual - 1];
184
- var direito = this.unario();
178
+ const operador = this.simbolos[this.atual - 1];
179
+ const direito = this.unario();
185
180
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
186
181
  }
187
182
  return expressao;
188
- };
189
- AvaliadorSintatico.prototype.multiplicar = function () {
190
- var expressao = this.exponenciacao();
183
+ }
184
+ multiplicar() {
185
+ let expressao = this.exponenciacao();
191
186
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.DIVISAO, delegua_1.default.MULTIPLICACAO, delegua_1.default.MODULO, delegua_1.default.DIVISAO_IGUAL, delegua_1.default.MULTIPLICACAO_IGUAL, delegua_1.default.MODULO_IGUAL)) {
192
- var operador = this.simbolos[this.atual - 1];
193
- var direito = this.exponenciacao();
187
+ const operador = this.simbolos[this.atual - 1];
188
+ const direito = this.exponenciacao();
194
189
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
195
190
  }
196
191
  return expressao;
197
- };
192
+ }
198
193
  /**
199
194
  * Se símbolo de operação é `+`, `-`, `+=` ou `-=`, monta objeto `Binario` para
200
195
  * ser avaliado pelo Interpretador.
201
196
  * @returns Um Construto, normalmente um `Binario`, ou `Unario` se houver alguma operação unária para ser avaliada.
202
197
  */
203
- AvaliadorSintatico.prototype.adicaoOuSubtracao = function () {
204
- var expressao = this.multiplicar();
198
+ adicaoOuSubtracao() {
199
+ let expressao = this.multiplicar();
205
200
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SUBTRACAO, delegua_1.default.ADICAO, delegua_1.default.MAIS_IGUAL, delegua_1.default.MENOS_IGUAL)) {
206
- var operador = this.simbolos[this.atual - 1];
207
- var direito = this.multiplicar();
201
+ const operador = this.simbolos[this.atual - 1];
202
+ const direito = this.multiplicar();
208
203
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
209
204
  }
210
205
  return expressao;
211
- };
212
- AvaliadorSintatico.prototype.bitFill = function () {
213
- var expressao = this.adicaoOuSubtracao();
206
+ }
207
+ bitFill() {
208
+ let expressao = this.adicaoOuSubtracao();
214
209
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.MENOR_MENOR, delegua_1.default.MAIOR_MAIOR)) {
215
- var operador = this.simbolos[this.atual - 1];
216
- var direito = this.adicaoOuSubtracao();
210
+ const operador = this.simbolos[this.atual - 1];
211
+ const direito = this.adicaoOuSubtracao();
217
212
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
218
213
  }
219
214
  return expressao;
220
- };
221
- AvaliadorSintatico.prototype.bitE = function () {
222
- var expressao = this.bitFill();
215
+ }
216
+ bitE() {
217
+ let expressao = this.bitFill();
223
218
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.BIT_AND)) {
224
- var operador = this.simbolos[this.atual - 1];
225
- var direito = this.bitFill();
219
+ const operador = this.simbolos[this.atual - 1];
220
+ const direito = this.bitFill();
226
221
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
227
222
  }
228
223
  return expressao;
229
- };
230
- AvaliadorSintatico.prototype.bitOu = function () {
231
- var expressao = this.bitE();
224
+ }
225
+ bitOu() {
226
+ let expressao = this.bitE();
232
227
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.BIT_OR, delegua_1.default.BIT_XOR)) {
233
- var operador = this.simbolos[this.atual - 1];
234
- var direito = this.bitE();
228
+ const operador = this.simbolos[this.atual - 1];
229
+ const direito = this.bitE();
235
230
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
236
231
  }
237
232
  return expressao;
238
- };
239
- AvaliadorSintatico.prototype.comparar = function () {
240
- var expressao = this.bitOu();
233
+ }
234
+ comparar() {
235
+ let expressao = this.bitOu();
241
236
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.MAIOR, delegua_1.default.MAIOR_IGUAL, delegua_1.default.MENOR, delegua_1.default.MENOR_IGUAL)) {
242
- var operador = this.simbolos[this.atual - 1];
243
- var direito = this.bitOu();
237
+ const operador = this.simbolos[this.atual - 1];
238
+ const direito = this.bitOu();
244
239
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
245
240
  }
246
241
  return expressao;
247
- };
248
- AvaliadorSintatico.prototype.comparacaoIgualdade = function () {
249
- var expressao = this.comparar();
242
+ }
243
+ comparacaoIgualdade() {
244
+ let expressao = this.comparar();
250
245
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.DIFERENTE, delegua_1.default.IGUAL_IGUAL)) {
251
- var operador = this.simbolos[this.atual - 1];
252
- var direito = this.comparar();
246
+ const operador = this.simbolos[this.atual - 1];
247
+ const direito = this.comparar();
253
248
  expressao = new construtos_1.Binario(this.hashArquivo, expressao, operador, direito);
254
249
  }
255
250
  return expressao;
256
- };
257
- AvaliadorSintatico.prototype.em = function () {
258
- var expressao = this.comparacaoIgualdade();
251
+ }
252
+ em() {
253
+ let expressao = this.comparacaoIgualdade();
259
254
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.EM)) {
260
- var operador = this.simbolos[this.atual - 1];
261
- var direito = this.comparacaoIgualdade();
255
+ const operador = this.simbolos[this.atual - 1];
256
+ const direito = this.comparacaoIgualdade();
262
257
  expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
263
258
  }
264
259
  return expressao;
265
- };
266
- AvaliadorSintatico.prototype.e = function () {
267
- var expressao = this.em();
260
+ }
261
+ e() {
262
+ let expressao = this.em();
268
263
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.E)) {
269
- var operador = this.simbolos[this.atual - 1];
270
- var direito = this.em();
264
+ const operador = this.simbolos[this.atual - 1];
265
+ const direito = this.em();
271
266
  expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
272
267
  }
273
268
  return expressao;
274
- };
275
- AvaliadorSintatico.prototype.ou = function () {
276
- var expressao = this.e();
269
+ }
270
+ ou() {
271
+ let expressao = this.e();
277
272
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.OU)) {
278
- var operador = this.simbolos[this.atual - 1];
279
- var direito = this.e();
273
+ const operador = this.simbolos[this.atual - 1];
274
+ const direito = this.e();
280
275
  expressao = new construtos_1.Logico(this.hashArquivo, expressao, operador, direito);
281
276
  }
282
277
  return expressao;
283
- };
278
+ }
284
279
  /**
285
280
  * Método que resolve atribuições.
286
281
  * @returns Um construto do tipo `Atribuir`, `Conjunto` ou `AtribuicaoSobrescrita`.
287
282
  */
288
- AvaliadorSintatico.prototype.atribuir = function () {
289
- var expressao = this.ou();
283
+ atribuir() {
284
+ const expressao = this.ou();
290
285
  if (expressao instanceof construtos_1.Binario &&
291
286
  [
292
287
  delegua_1.default.MAIS_IGUAL,
@@ -298,14 +293,14 @@ var AvaliadorSintatico = /** @class */ (function () {
298
293
  return new construtos_1.Atribuir(this.hashArquivo, expressao.esquerda.simbolo, expressao);
299
294
  }
300
295
  else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IGUAL)) {
301
- var igual = this.simbolos[this.atual - 1];
302
- var valor = this.atribuir();
296
+ const igual = this.simbolos[this.atual - 1];
297
+ const valor = this.atribuir();
303
298
  if (expressao instanceof construtos_1.Variavel) {
304
- var simbolo = expressao.simbolo;
299
+ const simbolo = expressao.simbolo;
305
300
  return new construtos_1.Atribuir(this.hashArquivo, simbolo, valor);
306
301
  }
307
302
  else if (expressao instanceof construtos_1.AcessoMetodo) {
308
- var get = expressao;
303
+ const get = expressao;
309
304
  // return new Conjunto(this.hashArquivo, 0, get.objeto, get.simbolo, valor);
310
305
  return new construtos_1.DefinirValor(this.hashArquivo, 0, get.objeto, get.simbolo, valor);
311
306
  }
@@ -315,85 +310,85 @@ var AvaliadorSintatico = /** @class */ (function () {
315
310
  this.erro(igual, 'Tarefa de atribuição inválida');
316
311
  }
317
312
  return expressao;
318
- };
319
- AvaliadorSintatico.prototype.expressao = function () {
313
+ }
314
+ expressao() {
320
315
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.LEIA))
321
316
  return this.declaracaoLeia();
322
317
  return this.atribuir();
323
- };
324
- AvaliadorSintatico.prototype.declaracaoEscreva = function () {
325
- var simboloAtual = this.simbolos[this.atual];
318
+ }
319
+ declaracaoEscreva() {
320
+ const simboloAtual = this.simbolos[this.atual];
326
321
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em escreva.");
327
- var argumentos = [];
322
+ const argumentos = [];
328
323
  do {
329
324
  argumentos.push(this.expressao());
330
325
  } while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
331
326
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em escreva.");
332
327
  return new declaracoes_1.Escreva(Number(simboloAtual.linha), simboloAtual.hashArquivo, argumentos);
333
- };
334
- AvaliadorSintatico.prototype.declaracaoExpressao = function () {
335
- var expressao = this.expressao();
328
+ }
329
+ declaracaoExpressao() {
330
+ const expressao = this.expressao();
336
331
  return new declaracoes_1.Expressao(expressao);
337
- };
338
- AvaliadorSintatico.prototype.declaracaoLeia = function () {
339
- var simboloAtual = this.simbolos[this.atual];
332
+ }
333
+ declaracaoLeia() {
334
+ const simboloAtual = this.simbolos[this.atual];
340
335
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' antes dos valores em leia.");
341
- var argumentos = [];
336
+ const argumentos = [];
342
337
  do {
343
338
  argumentos.push(this.expressao());
344
339
  } while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
345
340
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após os valores em leia.");
346
341
  return new declaracoes_1.Leia(simboloAtual.hashArquivo, Number(simboloAtual.linha), argumentos);
347
- };
348
- AvaliadorSintatico.prototype.blocoEscopo = function () {
349
- var declaracoes = [];
342
+ }
343
+ blocoEscopo() {
344
+ const declaracoes = [];
350
345
  while (!this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
351
346
  declaracoes.push(this.declaracao());
352
347
  }
353
348
  this.consumir(delegua_1.default.CHAVE_DIREITA, "Esperado '}' após o bloco.");
354
349
  return declaracoes;
355
- };
356
- AvaliadorSintatico.prototype.declaracaoSe = function () {
350
+ }
351
+ declaracaoSe() {
357
352
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'se'.");
358
- var condicao = this.expressao();
353
+ const condicao = this.expressao();
359
354
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após condição do se.");
360
- var caminhoEntao = this.resolverDeclaracao();
361
- var caminhosSeSenao = [];
355
+ const caminhoEntao = this.resolverDeclaracao();
356
+ const caminhosSeSenao = [];
362
357
  while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SENAOSE, delegua_1.default.SENÃOSE)) {
363
358
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'senaose' ou 'senãose'.");
364
- var condicaoSeSenao = this.expressao();
359
+ const condicaoSeSenao = this.expressao();
365
360
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após codição do 'senaose' ou 'senãose'.");
366
- var caminho = this.resolverDeclaracao();
361
+ const caminho = this.resolverDeclaracao();
367
362
  caminhosSeSenao.push({
368
363
  condicao: condicaoSeSenao,
369
364
  caminho: caminho,
370
365
  });
371
366
  }
372
- var caminhoSenao = null;
367
+ let caminhoSenao = null;
373
368
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SENAO, delegua_1.default.SENÃO)) {
374
369
  caminhoSenao = this.resolverDeclaracao();
375
370
  }
376
371
  return new declaracoes_1.Se(condicao, caminhoEntao, caminhosSeSenao, caminhoSenao);
377
- };
378
- AvaliadorSintatico.prototype.declaracaoEnquanto = function () {
372
+ }
373
+ declaracaoEnquanto() {
379
374
  try {
380
375
  this.blocos += 1;
381
376
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'enquanto'.");
382
- var condicao = this.expressao();
377
+ const condicao = this.expressao();
383
378
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após condicional.");
384
- var corpo = this.resolverDeclaracao();
379
+ const corpo = this.resolverDeclaracao();
385
380
  return new declaracoes_1.Enquanto(condicao, corpo);
386
381
  }
387
382
  finally {
388
383
  this.blocos -= 1;
389
384
  }
390
- };
391
- AvaliadorSintatico.prototype.declaracaoPara = function () {
385
+ }
386
+ declaracaoPara() {
392
387
  try {
393
- var simboloPara = this.simbolos[this.atual - 1];
388
+ const simboloPara = this.simbolos[this.atual - 1];
394
389
  this.blocos += 1;
395
390
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após 'para'.");
396
- var inicializador = void 0;
391
+ let inicializador;
397
392
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PONTO_E_VIRGULA)) {
398
393
  inicializador = null;
399
394
  }
@@ -403,61 +398,61 @@ var AvaliadorSintatico = /** @class */ (function () {
403
398
  else {
404
399
  inicializador = this.declaracaoExpressao();
405
400
  }
406
- var condicao = null;
401
+ let condicao = null;
407
402
  if (!this.verificarTipoSimboloAtual(delegua_1.default.PONTO_E_VIRGULA)) {
408
403
  condicao = this.expressao();
409
404
  }
410
- var incrementar = null;
405
+ let incrementar = null;
411
406
  if (!this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_DIREITO)) {
412
407
  incrementar = this.expressao();
413
408
  }
414
409
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após cláusulas");
415
- var corpo = this.resolverDeclaracao();
410
+ const corpo = this.resolverDeclaracao();
416
411
  return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
417
412
  }
418
413
  finally {
419
414
  this.blocos -= 1;
420
415
  }
421
- };
422
- AvaliadorSintatico.prototype.declaracaoSustar = function () {
416
+ }
417
+ declaracaoSustar() {
423
418
  if (this.blocos < 1) {
424
419
  this.erro(this.simbolos[this.atual - 1], "'sustar' ou 'pausa' deve estar dentro de um laço de repetição.");
425
420
  }
426
421
  return new declaracoes_1.Sustar(this.simbolos[this.atual]);
427
- };
428
- AvaliadorSintatico.prototype.declaracaoContinua = function () {
422
+ }
423
+ declaracaoContinua() {
429
424
  if (this.blocos < 1) {
430
425
  this.erro(this.simbolos[this.atual - 1], "'continua' precisa estar em um laço de repetição.");
431
426
  }
432
427
  return new declaracoes_1.Continua(this.simbolos[this.atual]);
433
- };
434
- AvaliadorSintatico.prototype.declaracaoRetorna = function () {
435
- var simboloChave = this.simbolos[this.atual - 1];
436
- var valor = null;
428
+ }
429
+ declaracaoRetorna() {
430
+ const simboloChave = this.simbolos[this.atual - 1];
431
+ let valor = null;
437
432
  if (!this.verificarTipoSimboloAtual(delegua_1.default.PONTO_E_VIRGULA)) {
438
433
  valor = this.expressao();
439
434
  }
440
435
  return new declaracoes_1.Retorna(simboloChave, valor);
441
- };
442
- AvaliadorSintatico.prototype.declaracaoEscolha = function () {
436
+ }
437
+ declaracaoEscolha() {
443
438
  try {
444
439
  this.blocos += 1;
445
440
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '{' após 'escolha'.");
446
- var condicao = this.expressao();
441
+ const condicao = this.expressao();
447
442
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado '}' após a condição de 'escolha'.");
448
443
  this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do 'escolha'.");
449
- var caminhos = [];
450
- var caminhoPadrao = null;
444
+ const caminhos = [];
445
+ let caminhoPadrao = null;
451
446
  while (!this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
452
447
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CASO)) {
453
- var caminhoCondicoes = [this.expressao()];
448
+ const caminhoCondicoes = [this.expressao()];
454
449
  this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' após o 'caso'.");
455
450
  while (this.verificarTipoSimboloAtual(delegua_1.default.CASO)) {
456
451
  this.consumir(delegua_1.default.CASO, null);
457
452
  caminhoCondicoes.push(this.expressao());
458
453
  this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'caso'.");
459
454
  }
460
- var declaracoes = [];
455
+ const declaracoes = [];
461
456
  do {
462
457
  declaracoes.push(this.resolverDeclaracao());
463
458
  } while (!this.verificarTipoSimboloAtual(delegua_1.default.CASO) &&
@@ -465,24 +460,24 @@ var AvaliadorSintatico = /** @class */ (function () {
465
460
  !this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA));
466
461
  caminhos.push({
467
462
  condicoes: caminhoCondicoes,
468
- declaracoes: declaracoes,
463
+ declaracoes,
469
464
  });
470
465
  }
471
466
  else if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PADRAO)) {
472
467
  if (caminhoPadrao !== null) {
473
- var excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simbolos[this.atual], "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
468
+ const excecao = new erro_avaliador_sintatico_1.ErroAvaliadorSintatico(this.simbolos[this.atual], "Você só pode ter um 'padrao' em cada declaração de 'escolha'.");
474
469
  this.erros.push(excecao);
475
470
  throw excecao;
476
471
  }
477
472
  this.consumir(delegua_1.default.DOIS_PONTOS, "Esperado ':' após declaração do 'padrao'.");
478
- var declaracoes = [];
473
+ const declaracoes = [];
479
474
  do {
480
475
  declaracoes.push(this.resolverDeclaracao());
481
476
  } while (!this.verificarTipoSimboloAtual(delegua_1.default.CASO) &&
482
477
  !this.verificarTipoSimboloAtual(delegua_1.default.PADRAO) &&
483
478
  !this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA));
484
479
  caminhoPadrao = {
485
- declaracoes: declaracoes,
480
+ declaracoes,
486
481
  };
487
482
  }
488
483
  }
@@ -491,50 +486,50 @@ var AvaliadorSintatico = /** @class */ (function () {
491
486
  finally {
492
487
  this.blocos -= 1;
493
488
  }
494
- };
495
- AvaliadorSintatico.prototype.declaracaoImportar = function () {
489
+ }
490
+ declaracaoImportar() {
496
491
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração.");
497
- var caminho = this.expressao();
498
- var simboloFechamento = this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
492
+ const caminho = this.expressao();
493
+ const simboloFechamento = this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração.");
499
494
  return new declaracoes_1.Importar(caminho, simboloFechamento);
500
- };
501
- AvaliadorSintatico.prototype.declaracaoTente = function () {
502
- var simboloTente = this.simbolos[this.atual - 1];
495
+ }
496
+ declaracaoTente() {
497
+ const simboloTente = this.simbolos[this.atual - 1];
503
498
  this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'tente'.");
504
- var blocoTente = this.blocoEscopo();
505
- var blocoPegue = null;
499
+ const blocoTente = this.blocoEscopo();
500
+ let blocoPegue = null;
506
501
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.PEGUE)) {
507
502
  this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
508
503
  blocoPegue = this.blocoEscopo();
509
504
  }
510
- var blocoSenao = null;
505
+ let blocoSenao = null;
511
506
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.SENAO, delegua_1.default.SENÃO)) {
512
507
  this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
513
508
  blocoSenao = this.blocoEscopo();
514
509
  }
515
- var blocoFinalmente = null;
510
+ let blocoFinalmente = null;
516
511
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.FINALMENTE)) {
517
512
  this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' após a declaração 'pegue'.");
518
513
  blocoFinalmente = this.blocoEscopo();
519
514
  }
520
515
  return new declaracoes_1.Tente(simboloTente.hashArquivo, Number(simboloTente.linha), blocoTente, blocoPegue, blocoSenao, blocoFinalmente);
521
- };
522
- AvaliadorSintatico.prototype.declaracaoFazer = function () {
523
- var simboloFazer = this.simbolos[this.atual - 1];
516
+ }
517
+ declaracaoFazer() {
518
+ const simboloFazer = this.simbolos[this.atual - 1];
524
519
  try {
525
520
  this.blocos += 1;
526
- var caminhoFazer = this.resolverDeclaracao();
521
+ const caminhoFazer = this.resolverDeclaracao();
527
522
  this.consumir(delegua_1.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
528
523
  this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' após declaração 'enquanto'.");
529
- var condicaoEnquanto = this.expressao();
524
+ const condicaoEnquanto = this.expressao();
530
525
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após declaração do 'enquanto'.");
531
526
  return new declaracoes_1.Fazer(simboloFazer.hashArquivo, Number(simboloFazer.linha), caminhoFazer, condicaoEnquanto);
532
527
  }
533
528
  finally {
534
529
  this.blocos -= 1;
535
530
  }
536
- };
537
- AvaliadorSintatico.prototype.resolverDeclaracao = function () {
531
+ }
532
+ resolverDeclaracao() {
538
533
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.FAZER))
539
534
  return this.declaracaoFazer();
540
535
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.TENTE))
@@ -556,15 +551,15 @@ var AvaliadorSintatico = /** @class */ (function () {
556
551
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.ESCREVA))
557
552
  return this.declaracaoEscreva();
558
553
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.CHAVE_ESQUERDA)) {
559
- var simboloInicioBloco = this.simbolos[this.atual - 1];
554
+ const simboloInicioBloco = this.simbolos[this.atual - 1];
560
555
  return new declaracoes_1.Bloco(simboloInicioBloco.hashArquivo, Number(simboloInicioBloco.linha), this.blocoEscopo());
561
556
  }
562
- var simboloAtual = this.simbolos[this.atual];
557
+ const simboloAtual = this.simbolos[this.atual];
563
558
  if (simboloAtual.tipo === delegua_1.default.IDENTIFICADOR) {
564
559
  // Pela gramática, a seguinte situação não pode ocorrer:
565
560
  // 1. O símbolo anterior ser um identificador; e
566
561
  // 2. O símbolo anterior estar na mesma linha do identificador atual.
567
- var simboloAnterior = this.simbolos[this.atual - 1];
562
+ const simboloAnterior = this.simbolos[this.atual - 1];
568
563
  if (!!simboloAnterior &&
569
564
  simboloAnterior.tipo === delegua_1.default.IDENTIFICADOR &&
570
565
  simboloAnterior.linha === simboloAtual.linha) {
@@ -572,30 +567,30 @@ var AvaliadorSintatico = /** @class */ (function () {
572
567
  }
573
568
  }
574
569
  return this.declaracaoExpressao();
575
- };
570
+ }
576
571
  /**
577
572
  * Caso símbolo atual seja `var`, devolve uma declaração de variável.
578
573
  * @returns Um Construto do tipo Var.
579
574
  */
580
- AvaliadorSintatico.prototype.declaracaoDeVariavel = function () {
581
- var simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
582
- var inicializador = null;
575
+ declaracaoDeVariavel() {
576
+ const simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome de variável.');
577
+ let inicializador = null;
583
578
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.IGUAL)) {
584
579
  inicializador = this.expressao();
585
580
  }
586
581
  return new declaracoes_1.Var(simbolo, inicializador);
587
- };
588
- AvaliadorSintatico.prototype.funcao = function (tipo) {
589
- var simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, "Esperado nome ".concat(tipo, "."));
582
+ }
583
+ funcao(tipo) {
584
+ const simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, `Esperado nome ${tipo}.`);
590
585
  return new declaracoes_1.FuncaoDeclaracao(simbolo, this.corpoDaFuncao(tipo));
591
- };
592
- AvaliadorSintatico.prototype.logicaComumParametros = function () {
593
- var parametros = [];
586
+ }
587
+ logicaComumParametros() {
588
+ const parametros = [];
594
589
  do {
595
590
  if (parametros.length >= 255) {
596
591
  this.erro(this.simbolos[this.atual], 'Não pode haver mais de 255 parâmetros');
597
592
  }
598
- var parametro = {};
593
+ const parametro = {};
599
594
  if (this.simbolos[this.atual].tipo === delegua_1.default.MULTIPLICACAO) {
600
595
  this.consumir(delegua_1.default.MULTIPLICACAO, null);
601
596
  parametro.tipo = 'estrela';
@@ -612,36 +607,36 @@ var AvaliadorSintatico = /** @class */ (function () {
612
607
  break;
613
608
  } while (this.verificarSeSimboloAtualEIgualA(delegua_1.default.VIRGULA));
614
609
  return parametros;
615
- };
616
- AvaliadorSintatico.prototype.corpoDaFuncao = function (tipo) {
610
+ }
611
+ corpoDaFuncao(tipo) {
617
612
  // O parêntese esquerdo é considerado o símbolo inicial para
618
613
  // fins de pragma.
619
- var parenteseEsquerdo = this.consumir(delegua_1.default.PARENTESE_ESQUERDO, "Esperado '(' ap\u00F3s o nome ".concat(tipo, "."));
620
- var parametros = [];
614
+ const parenteseEsquerdo = this.consumir(delegua_1.default.PARENTESE_ESQUERDO, `Esperado '(' após o nome ${tipo}.`);
615
+ let parametros = [];
621
616
  if (!this.verificarTipoSimboloAtual(delegua_1.default.PARENTESE_DIREITO)) {
622
617
  parametros = this.logicaComumParametros();
623
618
  }
624
619
  this.consumir(delegua_1.default.PARENTESE_DIREITO, "Esperado ')' após parâmetros.");
625
- this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo do ".concat(tipo, "."));
626
- var corpo = this.blocoEscopo();
620
+ this.consumir(delegua_1.default.CHAVE_ESQUERDA, `Esperado '{' antes do escopo do ${tipo}.`);
621
+ const corpo = this.blocoEscopo();
627
622
  return new construtos_1.FuncaoConstruto(this.hashArquivo, Number(parenteseEsquerdo.linha), parametros, corpo);
628
- };
629
- AvaliadorSintatico.prototype.declaracaoDeClasse = function () {
630
- var simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
631
- var superClasse = null;
623
+ }
624
+ declaracaoDeClasse() {
625
+ const simbolo = this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome da classe.');
626
+ let superClasse = null;
632
627
  if (this.verificarSeSimboloAtualEIgualA(delegua_1.default.HERDA)) {
633
628
  this.consumir(delegua_1.default.IDENTIFICADOR, 'Esperado nome da SuperClasse.');
634
629
  superClasse = new construtos_1.Variavel(this.hashArquivo, this.simbolos[this.atual - 1]);
635
630
  }
636
631
  this.consumir(delegua_1.default.CHAVE_ESQUERDA, "Esperado '{' antes do escopo da classe.");
637
- var metodos = [];
632
+ const metodos = [];
638
633
  while (!this.verificarTipoSimboloAtual(delegua_1.default.CHAVE_DIREITA) && !this.estaNoFinal()) {
639
634
  metodos.push(this.funcao('método'));
640
635
  }
641
636
  this.consumir(delegua_1.default.CHAVE_DIREITA, "Esperado '}' após o escopo da classe.");
642
637
  return new declaracoes_1.Classe(simbolo, superClasse, metodos);
643
- };
644
- AvaliadorSintatico.prototype.declaracao = function () {
638
+ }
639
+ declaracao() {
645
640
  try {
646
641
  if ((this.verificarTipoSimboloAtual(delegua_1.default.FUNCAO) ||
647
642
  this.verificarTipoSimboloAtual(delegua_1.default.FUNÇÃO)) &&
@@ -659,16 +654,16 @@ var AvaliadorSintatico = /** @class */ (function () {
659
654
  this.sincronizar();
660
655
  return null;
661
656
  }
662
- };
657
+ }
663
658
  /**
664
659
  * Usado quando há erros na avaliação sintática.
665
660
  * Garante que o código não entre em loop infinito.
666
661
  * @returns Sempre retorna `void`.
667
662
  */
668
- AvaliadorSintatico.prototype.sincronizar = function () {
663
+ sincronizar() {
669
664
  this.avancarEDevolverAnterior();
670
665
  while (!this.estaNoFinal()) {
671
- var tipoSimboloAtual = this.simbolos[this.atual - 1].tipo;
666
+ const tipoSimboloAtual = this.simbolos[this.atual - 1].tipo;
672
667
  if (tipoSimboloAtual === delegua_1.default.PONTO_E_VIRGULA)
673
668
  return;
674
669
  switch (tipoSimboloAtual) {
@@ -685,28 +680,27 @@ var AvaliadorSintatico = /** @class */ (function () {
685
680
  }
686
681
  this.avancarEDevolverAnterior();
687
682
  }
688
- };
689
- AvaliadorSintatico.prototype.analisar = function (retornoLexador, hashArquivo) {
690
- var inicioAnalise = (0, browser_process_hrtime_1.default)();
683
+ }
684
+ analisar(retornoLexador, hashArquivo) {
685
+ const inicioAnalise = (0, browser_process_hrtime_1.default)();
691
686
  this.erros = [];
692
687
  this.atual = 0;
693
688
  this.blocos = 0;
694
689
  this.hashArquivo = hashArquivo || 0;
695
690
  this.simbolos = (retornoLexador === null || retornoLexador === void 0 ? void 0 : retornoLexador.simbolos) || [];
696
- var declaracoes = [];
691
+ const declaracoes = [];
697
692
  while (!this.estaNoFinal()) {
698
693
  declaracoes.push(this.declaracao());
699
694
  }
700
695
  if (this.performance) {
701
- var deltaAnalise = (0, browser_process_hrtime_1.default)(inicioAnalise);
702
- console.log("[Avaliador Sint\u00E1tico] Tempo para an\u00E1lise: ".concat(deltaAnalise[0] * 1e9 + deltaAnalise[1], "ns"));
696
+ const deltaAnalise = (0, browser_process_hrtime_1.default)(inicioAnalise);
697
+ console.log(`[Avaliador Sintático] Tempo para análise: ${deltaAnalise[0] * 1e9 + deltaAnalise[1]}ns`);
703
698
  }
704
699
  return {
705
700
  declaracoes: declaracoes,
706
701
  erros: this.erros,
707
702
  };
708
- };
709
- return AvaliadorSintatico;
710
- }());
703
+ }
704
+ }
711
705
  exports.AvaliadorSintatico = AvaliadorSintatico;
712
706
  //# sourceMappingURL=avaliador-sintatico.js.map