@designliquido/delegua 0.9.2 → 0.9.4

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