@designliquido/delegua 0.52.2 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/README.md +2 -2
  2. package/avaliador-sintatico/avaliador-sintatico.d.ts +38 -3
  3. package/avaliador-sintatico/avaliador-sintatico.d.ts.map +1 -1
  4. package/avaliador-sintatico/avaliador-sintatico.js +112 -14
  5. package/avaliador-sintatico/avaliador-sintatico.js.map +1 -1
  6. package/bin/package.json +1 -1
  7. package/construtos/enquanto-como-construto.d.ts +14 -0
  8. package/construtos/enquanto-como-construto.d.ts.map +1 -0
  9. package/construtos/enquanto-como-construto.js +19 -0
  10. package/construtos/enquanto-como-construto.js.map +1 -0
  11. package/construtos/fazer-como-construto.d.ts +14 -0
  12. package/construtos/fazer-como-construto.d.ts.map +1 -0
  13. package/construtos/fazer-como-construto.js +19 -0
  14. package/construtos/fazer-como-construto.js.map +1 -0
  15. package/construtos/index.d.ts +4 -0
  16. package/construtos/index.d.ts.map +1 -1
  17. package/construtos/index.js +4 -0
  18. package/construtos/index.js.map +1 -1
  19. package/construtos/para-cada-como-construto.d.ts +18 -0
  20. package/construtos/para-cada-como-construto.d.ts.map +1 -0
  21. package/construtos/para-cada-como-construto.js +21 -0
  22. package/construtos/para-cada-como-construto.js.map +1 -0
  23. package/construtos/para-como-construto.d.ts +19 -0
  24. package/construtos/para-como-construto.d.ts.map +1 -0
  25. package/construtos/para-como-construto.js +24 -0
  26. package/construtos/para-como-construto.js.map +1 -0
  27. package/declaracoes/bloco.d.ts.map +1 -1
  28. package/declaracoes/bloco.js +2 -0
  29. package/declaracoes/bloco.js.map +1 -1
  30. package/declaracoes/enquanto.d.ts +2 -1
  31. package/declaracoes/enquanto.d.ts.map +1 -1
  32. package/declaracoes/enquanto.js.map +1 -1
  33. package/declaracoes/fazer.d.ts +2 -1
  34. package/declaracoes/fazer.d.ts.map +1 -1
  35. package/declaracoes/fazer.js.map +1 -1
  36. package/declaracoes/para-cada.d.ts +5 -4
  37. package/declaracoes/para-cada.d.ts.map +1 -1
  38. package/declaracoes/para-cada.js +1 -1
  39. package/declaracoes/para-cada.js.map +1 -1
  40. package/declaracoes/para.d.ts +2 -1
  41. package/declaracoes/para.d.ts.map +1 -1
  42. package/declaracoes/para.js.map +1 -1
  43. package/formatadores/formatador-delegua.js +1 -1
  44. package/formatadores/formatador-delegua.js.map +1 -1
  45. package/interfaces/delegua/enquanto-interface.d.ts +9 -0
  46. package/interfaces/delegua/enquanto-interface.d.ts.map +1 -0
  47. package/interfaces/delegua/enquanto-interface.js +3 -0
  48. package/interfaces/delegua/enquanto-interface.js.map +1 -0
  49. package/interfaces/delegua/fazer-interface.d.ts +9 -0
  50. package/interfaces/delegua/fazer-interface.d.ts.map +1 -0
  51. package/interfaces/delegua/fazer-interface.js +3 -0
  52. package/interfaces/delegua/fazer-interface.js.map +1 -0
  53. package/interfaces/delegua/index.d.ts +5 -0
  54. package/interfaces/delegua/index.d.ts.map +1 -0
  55. package/interfaces/delegua/index.js +21 -0
  56. package/interfaces/delegua/index.js.map +1 -0
  57. package/interfaces/delegua/para-cada-interface.d.ts +11 -0
  58. package/interfaces/delegua/para-cada-interface.d.ts.map +1 -0
  59. package/interfaces/delegua/para-cada-interface.js +3 -0
  60. package/interfaces/delegua/para-cada-interface.js.map +1 -0
  61. package/interfaces/delegua/para-interface.d.ts +14 -0
  62. package/interfaces/delegua/para-interface.d.ts.map +1 -0
  63. package/interfaces/delegua/para-interface.js +3 -0
  64. package/interfaces/delegua/para-interface.js.map +1 -0
  65. package/interfaces/index.d.ts +1 -0
  66. package/interfaces/index.d.ts.map +1 -1
  67. package/interfaces/index.js +1 -0
  68. package/interfaces/index.js.map +1 -1
  69. package/interfaces/retornos/retorno-execucao-interface.d.ts +2 -1
  70. package/interfaces/retornos/retorno-execucao-interface.d.ts.map +1 -1
  71. package/interfaces/visitante-comum-interface.d.ts +1 -2
  72. package/interfaces/visitante-comum-interface.d.ts.map +1 -1
  73. package/interfaces/visitante-delegua-interface.d.ts +12 -0
  74. package/interfaces/visitante-delegua-interface.d.ts.map +1 -0
  75. package/interfaces/visitante-delegua-interface.js +3 -0
  76. package/interfaces/visitante-delegua-interface.js.map +1 -0
  77. package/interpretador/interpretador-base.d.ts +1 -2
  78. package/interpretador/interpretador-base.d.ts.map +1 -1
  79. package/interpretador/interpretador-base.js +0 -48
  80. package/interpretador/interpretador-base.js.map +1 -1
  81. package/interpretador/interpretador-com-depuracao.d.ts.map +1 -1
  82. package/interpretador/interpretador-com-depuracao.js +1 -3
  83. package/interpretador/interpretador-com-depuracao.js.map +1 -1
  84. package/interpretador/interpretador.d.ts +25 -5
  85. package/interpretador/interpretador.d.ts.map +1 -1
  86. package/interpretador/interpretador.js +210 -2
  87. package/interpretador/interpretador.js.map +1 -1
  88. package/package.json +1 -1
  89. package/tradutores/tradutor-assemblyscript.js +1 -1
  90. package/tradutores/tradutor-assemblyscript.js.map +1 -1
  91. package/tradutores/tradutor-javascript.js +1 -1
  92. package/tradutores/tradutor-javascript.js.map +1 -1
  93. package/tradutores/tradutor-mermaidjs.js +1 -1
  94. package/tradutores/tradutor-mermaidjs.js.map +1 -1
  95. package/tradutores/tradutor-python.js +1 -1
  96. package/tradutores/tradutor-python.js.map +1 -1
  97. package/tradutores/tradutor-reverso-tenda.js +1 -1
  98. package/tradutores/tradutor-reverso-tenda.js.map +1 -1
  99. package/umd/delegua.js +821 -465
package/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  <h3 align="center">Linguagem Delégua</h3>
5
5
 
6
6
  <p align="center">
7
- Linguagem de programação 100% em português com suporte a múltiplos dialetos, como Portugol VisuAlg, Portugol Studio, Mapler e BIRL.</a>
7
+ Linguagem de programação 100% em português com suporte a múltiplos dialetos, como variações de Portugol (VisuAlg, Portugol Studio, Portugol IPT, Mapler), e outros (Pituguês, BIRL, Calango).</a>
8
8
  </p>
9
9
 
10
10
  <p align="center">
@@ -43,7 +43,7 @@
43
43
 
44
44
  ## Introdução
45
45
 
46
- Delégua é uma linguagem de programação baseada na língua portuguesa, cujo código começou como uma variação (_fork_) da [linguagem Égua](https://egua.dev), usada para fins educacionais e comerciais pela Design Líquido. A variação começou na versão 1.2.0 de Égua.
46
+ Delégua é uma linguagem de programação baseada na língua portuguesa, usada para fins educacionais e comerciais pela Design Líquido, cujo código começou como uma variação (_fork_) da [linguagem Égua](https://egua.dev). A variação começou na versão 1.2.0 de Égua.
47
47
 
48
48
  Delégua tem retrocompatibilidade parcial com a linguagem Égua e compreende sua extensão de arquivo (`.egua`), para
49
49
  aplicações por linha de comando. Em outras palavras, todo programa escrito em Égua funciona no dialeto de Delégua correspondente. No mais, Delégua se diferenciou substancialmente de Égua com o passar dos anos, [e essas diferenças estão descritas em nossa documentação](https://github.com/DesignLiquido/delegua/wiki).
@@ -1,7 +1,7 @@
1
- import { AcessoMetodoOuPropriedade, Chamada, Construto, Decorador, Dicionario, FuncaoConstruto, Leia, Tupla } from '../construtos';
1
+ import { AcessoMetodoOuPropriedade, Chamada, Construto, Decorador, Dicionario, EnquantoComoConstruto, FuncaoConstruto, Leia, ParaCadaComoConstruto, ParaComoConstruto, Tupla, Variavel } from '../construtos';
2
2
  import { AvaliadorSintaticoInterface, ParametroInterface, SimboloInterface } from '../interfaces';
3
3
  import { ErroAvaliadorSintatico } from './erro-avaliador-sintatico';
4
- import { Classe, Comentario, Const, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, Fazer, FuncaoDeclaracao, Importar, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, Var } from '../declaracoes';
4
+ import { Bloco, Classe, Comentario, Const, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Falhar, Fazer, FuncaoDeclaracao, Importar, Para, ParaCada, Retorna, Se, Sustar, TendoComo, Tente, Var } from '../declaracoes';
5
5
  import { RetornoAvaliadorSintatico } from '../interfaces/retornos/retorno-avaliador-sintatico';
6
6
  import { RetornoLexador } from '../interfaces/retornos/retorno-lexador';
7
7
  import { AvaliadorSintaticoBase } from './avaliador-sintatico-base';
@@ -51,6 +51,16 @@ export declare class AvaliadorSintatico extends AvaliadorSintaticoBase implement
51
51
  protected obterChaveDicionario(): Construto;
52
52
  protected construtoDicionario(simboloChaveEsquerda: SimboloInterface): Dicionario;
53
53
  protected construtoTupla(): Tupla;
54
+ protected enquantoComoConstruto(): EnquantoComoConstruto;
55
+ protected fazerComoConstruto(simboloFazer: SimboloInterface): Construto;
56
+ protected paraCadaComoConstrutoVetor(simboloPara: SimboloInterface): ParaCadaComoConstruto;
57
+ protected paraCadaComoConstrutoDicionario(simboloPara: SimboloInterface): ParaCadaComoConstruto;
58
+ protected paraCadaComoConstruto(simboloPara: SimboloInterface): ParaCadaComoConstruto;
59
+ protected paraTradicionalComoConstruto(simboloPara: SimboloInterface): ParaComoConstruto;
60
+ /**
61
+ * Método que resolve `para` ou `para cada` como construto.
62
+ */
63
+ protected paraComoConstruto(simboloPara: SimboloInterface): ParaCadaComoConstruto | ParaComoConstruto;
54
64
  primario(): Construto;
55
65
  chamar(): Construto;
56
66
  /**
@@ -101,12 +111,20 @@ export declare class AvaliadorSintatico extends AvaliadorSintaticoBase implement
101
111
  protected declaracaoComentarioMultilinha(): Comentario;
102
112
  protected declaracaoComentarioUmaLinha(): Comentario;
103
113
  declaracaoContinua(): Continua;
114
+ protected logicaComumEnquanto(): {
115
+ condicao: Construto;
116
+ corpo: Bloco;
117
+ };
104
118
  declaracaoEnquanto(): Enquanto;
105
119
  protected declaracaoEscolha(): Escolha;
106
120
  declaracaoEscreva(): Escreva;
107
121
  protected declaracaoExpressao(): Expressao;
108
122
  protected declaracaoFalhar(): Falhar;
109
- protected declaracaoFazer(): Fazer;
123
+ protected logicaComumFazer(): {
124
+ caminhoFazer: Declaracao | Declaracao[];
125
+ condicaoEnquanto: Construto;
126
+ };
127
+ protected declaracaoFazer(simboloFazer: SimboloInterface): Fazer;
110
128
  /**
111
129
  * O símbolo é emitido aqui para fins de formatação, mas este método é
112
130
  * sobrescrito em `delegua-node`.
@@ -114,9 +132,26 @@ export declare class AvaliadorSintatico extends AvaliadorSintaticoBase implement
114
132
  */
115
133
  declaracaoImportar(): Importar;
116
134
  declaracaoPara(): Para | ParaCada;
135
+ protected logicaParaCadaDicionario(simboloPara: SimboloInterface): {
136
+ nomeVariavelChave: SimboloInterface<string>;
137
+ nomeVariavelValor: SimboloInterface<string>;
138
+ dicionario: Construto;
139
+ corpo: Bloco;
140
+ };
117
141
  protected declaracaoParaCadaDicionario(simboloPara: SimboloInterface): ParaCada;
142
+ protected logicaComumParaCadaVetor(simboloPara: SimboloInterface): {
143
+ variavelIteracao: Variavel<string>;
144
+ vetor: Construto;
145
+ corpo: Bloco;
146
+ };
118
147
  protected declaracaoParaCadaVetor(simboloPara: SimboloInterface): ParaCada;
119
148
  protected declaracaoParaCada(simboloPara: SimboloInterface): ParaCada;
149
+ protected logicaComumPara(simboloPara: SimboloInterface): {
150
+ inicializador: Expressao | Var | Const[];
151
+ condicao: any;
152
+ incrementar: any;
153
+ corpo: Bloco;
154
+ };
120
155
  protected declaracaoParaTradicional(simboloPara: SimboloInterface): Para;
121
156
  declaracaoRetorna(): Retorna;
122
157
  declaracaoSe(): Se;
@@ -1 +1 @@
1
- {"version":3,"file":"avaliador-sintatico.d.ts","sourceRoot":"","sources":["../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avaliador-sintatico.d.ts","sourceRoot":"","sources":["../../fontes/avaliador-sintatico/avaliador-sintatico.ts"],"names":[],"mappings":"AAEA,OAAO,EAGH,yBAAyB,EAOzB,OAAO,EAGP,SAAS,EACT,SAAS,EAET,UAAU,EACV,qBAAqB,EAGrB,eAAe,EAEf,IAAI,EAGJ,qBAAqB,EACrB,iBAAiB,EAKjB,KAAK,EAEL,QAAQ,EAEX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,2BAA2B,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAElG,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,EACH,KAAK,EACL,MAAM,EACN,UAAU,EACV,KAAK,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,SAAS,EACT,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,QAAQ,EACR,IAAI,EACJ,QAAQ,EAER,OAAO,EACP,EAAE,EACF,MAAM,EACN,SAAS,EACT,KAAK,EACL,GAAG,EACN,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,oDAAoD,CAAC;AAC/F,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAExE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAGpE,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EAAE,6BAA6B,EAAE,MAAM,qCAAqC,CAAC;AAepF;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBACT,SAAQ,sBACR,YAAW,2BAA2B,CAAC,gBAAgB,EAAE,UAAU,CAAC;IAEpE,gBAAgB,EAAE,SAAS,EAAE,CAAC;IAC9B,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,KAAK,EAAE,sBAAsB,EAAE,CAAC;IAChC,sBAAsB,EAAE;QAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAC;IAC3D,YAAY,EAAE,YAAY,CAAC;IAC3B,0BAA0B,EAAE;QAAE,CAAC,cAAc,EAAE,MAAM,GAAG;YAAE,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;IACzF,oBAAoB,EAAE;QAClB,CAAC,kBAAkB,EAAE,MAAM,GAAG;YAAE,CAAC,aAAa,EAAE,MAAM,GAAG,6BAA6B,CAAA;SAAE,CAAC;KAC5F,CAAC;IAEF,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,OAAO,CAAC;IACrB,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEzB,WAAW,UAAQ;IAmB/B,SAAS,CAAC,2BAA2B,IAAI,MAAM;IA0C/C,SAAS,CAAC,oBAAoB,IAAI,SAAS;IA4C3C,SAAS,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,gBAAgB,GAAG,UAAU;IAiCjF,SAAS,CAAC,cAAc,IAAI,KAAK;IAajC,SAAS,CAAC,qBAAqB,IAAI,qBAAqB;IASxD,SAAS,CAAC,kBAAkB,CAAC,YAAY,EAAE,gBAAgB,GAAG,SAAS;IAgBvE,SAAS,CAAC,0BAA0B,CAAC,WAAW,EAAE,gBAAgB;IAYlE,SAAS,CAAC,+BAA+B,CAAC,WAAW,EAAE,gBAAgB;IAevE,SAAS,CAAC,qBAAqB,CAAC,WAAW,EAAE,gBAAgB,GAAG,qBAAqB;IAerF,SAAS,CAAC,4BAA4B,CAAC,WAAW,EAAE,gBAAgB;IAapE;;OAEG;IACH,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,gBAAgB,GAAG,qBAAqB,GAAG,iBAAiB;IAc5F,QAAQ,IAAI,SAAS;IA2WrB,MAAM,IAAI,SAAS;IAmC5B;;;;;;OAMG;IACH,SAAS,CAAC,gDAAgD,CACtD,wBAAwB,EAAE,yBAAyB,GACpD,SAAS;IAmGZ,SAAS,CAAC,gCAAgC,CACtC,yBAAyB,EAAE,6BAA6B,EAAE,EAC1D,oBAAoB,EAAE,SAAS,EAAE,GAClC,MAAM,EAAE;IA+DX;;;;;;OAMG;IACH,SAAS,CAAC,uBAAuB,CAC7B,eAAe,EAAE,SAAS,EAC1B,UAAU,EAAE,SAAS,EAAE,EACvB,aAAa,GAAE,MAAM,GAAG,SAAqB,GAC9C,SAAS;IAoFH,gBAAgB,CACrB,eAAe,EAAE,SAAS,EAC1B,aAAa,GAAE,MAAM,GAAG,SAAqB,GAC9C,OAAO;IAsCD,MAAM,IAAI,SAAS;IAkBnB,WAAW,IAAI,SAAS;IA4BjC;;;;OAIG;IACM,iBAAiB,IAAI,SAAS;IAqC9B,QAAQ,IAAI,SAAS;IAsBrB,IAAI,IAAI,SAAS;IAiBjB,KAAK,IAAI,SAAS;IAmBlB,QAAQ,IAAI,SAAS;IAwBrB,mBAAmB,IAAI,SAAS;IAsBhC,EAAE,IAAI,SAAS;IAYf,CAAC,IAAI,SAAS;IAYvB;;;OAGG;IACM,QAAQ,IAAI,SAAS;IAkE9B;;;OAGG;IACM,aAAa,IAAI,IAAI;IAyBrB,SAAS,IAAI,SAAS;IAItB,WAAW,IAAI,KAAK,CAAC,UAAU,CAAC;IAwBzC,SAAS,CAAC,8BAA8B,IAAI,UAAU;IAgBtD,SAAS,CAAC,4BAA4B,IAAI,UAAU;IAU3C,kBAAkB,IAAI,QAAQ;IAavC,SAAS,CAAC,mBAAmB;;;;IAWpB,kBAAkB,IAAI,QAAQ;IAYvC,SAAS,CAAC,iBAAiB,IAAI,OAAO;IAmF7B,iBAAiB,IAAI,OAAO;IA2BrC,SAAS,CAAC,mBAAmB,IAAI,SAAS;IAY1C,SAAS,CAAC,gBAAgB,IAAI,MAAM;IAKpC,SAAS,CAAC,gBAAgB;;;;IAc1B,SAAS,CAAC,eAAe,CAAC,YAAY,EAAE,gBAAgB,GAAG,KAAK;IAgBhE;;;;OAIG;IACM,kBAAkB,IAAI,QAAQ;IAQ9B,cAAc,IAAI,IAAI,GAAG,QAAQ;IAe1C,SAAS,CAAC,wBAAwB,CAAC,WAAW,EAAE,gBAAgB;;;;;;IA6DhE,SAAS,CAAC,4BAA4B,CAAC,WAAW,EAAE,gBAAgB;IAepE,SAAS,CAAC,wBAAwB,CAAC,WAAW,EAAE,gBAAgB;;;;;IA+ChE,SAAS,CAAC,uBAAuB,CAAC,WAAW,EAAE,gBAAgB;IAY/D,SAAS,CAAC,kBAAkB,CAAC,WAAW,EAAE,gBAAgB,GAAG,QAAQ;IAerE,SAAS,CAAC,eAAe,CAAC,WAAW,EAAE,gBAAgB;;;;;;IAmDvD,SAAS,CAAC,yBAAyB,CAAC,WAAW,EAAE,gBAAgB,GAAG,IAAI;IAa/D,iBAAiB,IAAI,OAAO;IA8B5B,YAAY,IAAI,EAAE;IAalB,gBAAgB,IAAI,MAAM;IAa1B,eAAe,IAAI,KAAK;IAqDjC,SAAS,CAAC,iBAAiB,IAAI,IAAI;IA6CnC;;;;;;;OAOG;IACH,SAAS,CAAC,kBAAkB,IAAI,UAAU,GAAG,UAAU,EAAE;IAgFzD,SAAS,CAAC,mBAAmB,IAAI,SAAS;IAmD1C,SAAS,CAAC,iCAAiC,IAAI,GAAG,EAAE;IAwCpD,SAAS,CAAC,8CAA8C,CACpD,aAAa,EAAE,SAAS,EACxB,IAAI,EAAE,MAAM,GACb,MAAM;IA+FT;;;OAGG;IACH,SAAS,CAAC,qBAAqB,IAAI,GAAG,EAAE;IAoFxC,SAAS,CAAC,kCAAkC,IAAI,KAAK,EAAE;IAsCvD;;;OAGG;IACH,sBAAsB,IAAI,KAAK,EAAE;IAqEjC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAqChD,SAAS,CAAC,qBAAqB,IAAI,kBAAkB,EAAE;IA2C9C,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAmF5C,kBAAkB,IAAI,MAAM;IAuFrC;;;;;;;;;;;OAWG;IACM,6BAA6B,IAAI,UAAU,GAAG,UAAU,EAAE;IA2BnE;;;;OAIG;IACH,SAAS,CAAC,WAAW,IAAI,IAAI;IAuB7B;;;;OAIG;IACH,SAAS,CAAC,uBAAuB;IAkKjC,QAAQ,CACJ,cAAc,EAAE,cAAc,CAAC,gBAAgB,CAAC,EAChD,WAAW,EAAE,MAAM,GACpB,yBAAyB,CAAC,UAAU,CAAC;CAoC3C"}
@@ -14,13 +14,13 @@ const inferenciador_1 = require("../inferenciador");
14
14
  const pilha_escopos_1 = require("./pilha-escopos");
15
15
  const informacao_escopo_1 = require("./informacao-escopo");
16
16
  const informacao_variavel_ou_constante_1 = require("../informacao-variavel-ou-constante");
17
+ const comum_1 = require("./comum");
17
18
  const delegua_1 = __importDefault(require("../tipos-de-dados/delegua"));
18
19
  const delegua_2 = __importDefault(require("../tipos-de-simbolos/delegua"));
19
20
  const primitivas_dicionario_1 = __importDefault(require("../bibliotecas/primitivas-dicionario"));
20
21
  const primitivas_numero_1 = __importDefault(require("../bibliotecas/primitivas-numero"));
21
22
  const primitivas_texto_1 = __importDefault(require("../bibliotecas/primitivas-texto"));
22
23
  const primitivas_vetor_1 = __importDefault(require("../bibliotecas/primitivas-vetor"));
23
- const comum_1 = require("./comum");
24
24
  /**
25
25
  * O avaliador sintático (_Parser_) é responsável por transformar os símbolos do Lexador em estruturas de alto nível.
26
26
  * Essas estruturas de alto nível são as partes que executam lógica de programação de fato.
@@ -143,6 +143,56 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
143
143
  this.consumir(delegua_2.default.COLCHETE_DIREITO, "Esperado ']' após a expressão.");
144
144
  return new tuplas_1.SeletorTuplas(...argumentos);
145
145
  }
146
+ enquantoComoConstruto() {
147
+ const { condicao, corpo } = this.logicaComumEnquanto();
148
+ return new construtos_1.EnquantoComoConstruto(condicao, corpo);
149
+ }
150
+ fazerComoConstruto(simboloFazer) {
151
+ try {
152
+ this.blocos += 1;
153
+ const { caminhoFazer, condicaoEnquanto } = this.logicaComumFazer();
154
+ return new construtos_1.FazerComoConstruto(simboloFazer.hashArquivo, Number(simboloFazer.linha), caminhoFazer, condicaoEnquanto);
155
+ }
156
+ finally {
157
+ this.blocos -= 1;
158
+ }
159
+ }
160
+ paraCadaComoConstrutoVetor(simboloPara) {
161
+ const { variavelIteracao, vetor, corpo } = this.logicaComumParaCadaVetor(simboloPara);
162
+ return new construtos_1.ParaCadaComoConstruto(this.hashArquivo, Number(simboloPara.linha), variavelIteracao, vetor, corpo);
163
+ }
164
+ paraCadaComoConstrutoDicionario(simboloPara) {
165
+ const { nomeVariavelChave, nomeVariavelValor, dicionario, corpo } = this.logicaParaCadaDicionario(simboloPara);
166
+ return new construtos_1.ParaCadaComoConstruto(this.hashArquivo, Number(simboloPara.linha), new tuplas_1.Dupla(new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelChave.lexema), new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelValor.lexema)), dicionario, corpo);
167
+ }
168
+ paraCadaComoConstruto(simboloPara) {
169
+ if (this.verificarTipoSimboloAtual(delegua_2.default.IDENTIFICADOR)) {
170
+ return this.paraCadaComoConstrutoVetor(simboloPara);
171
+ }
172
+ if (this.verificarTipoSimboloAtual(delegua_2.default.CHAVE_ESQUERDA)) {
173
+ return this.paraCadaComoConstrutoDicionario(simboloPara);
174
+ }
175
+ throw this.erro(simboloPara, 'Identificador de iteração deve ser ou um par chave-valor, ou um nome de variável.');
176
+ }
177
+ paraTradicionalComoConstruto(simboloPara) {
178
+ const { inicializador, condicao, incrementar, corpo } = this.logicaComumPara(simboloPara);
179
+ return new construtos_1.ParaComoConstruto(simboloPara.hashArquivo, simboloPara.linha, inicializador, condicao, incrementar, corpo);
180
+ }
181
+ /**
182
+ * Método que resolve `para` ou `para cada` como construto.
183
+ */
184
+ paraComoConstruto(simboloPara) {
185
+ try {
186
+ this.blocos += 1;
187
+ if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.CADA)) {
188
+ return this.paraCadaComoConstruto(simboloPara);
189
+ }
190
+ return this.paraTradicionalComoConstruto(simboloPara);
191
+ }
192
+ finally {
193
+ this.blocos -= 1;
194
+ }
195
+ }
146
196
  primario() {
147
197
  const simboloAtual = this.simbolos[this.atual];
148
198
  let valores = [];
@@ -194,6 +244,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
194
244
  const valoresSemSeparadores = valoresSemComentarios.filter((v) => v.constructor.name !== 'Separador');
195
245
  const tipoVetor = (0, inferenciador_1.inferirTipoVariavel)(valoresSemSeparadores);
196
246
  return new construtos_1.Vetor(this.hashArquivo, Number(simboloAtual.linha), valores, valores.length, tipoVetor);
247
+ case delegua_2.default.ENQUANTO:
248
+ this.avancarEDevolverAnterior();
249
+ return this.enquantoComoConstruto();
197
250
  case delegua_2.default.EXPRESSAO_REGULAR:
198
251
  let valor = '';
199
252
  let linhaAtual = this.simbolos[this.atual].linha;
@@ -212,6 +265,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
212
265
  case delegua_2.default.FALSO:
213
266
  this.avancarEDevolverAnterior();
214
267
  return new construtos_1.Literal(this.hashArquivo, Number(simboloAtual.linha), false, 'lógico');
268
+ case delegua_2.default.FAZER:
269
+ const simboloFazer = this.avancarEDevolverAnterior();
270
+ return this.fazerComoConstruto(simboloFazer);
215
271
  case delegua_2.default.FUNCAO:
216
272
  case delegua_2.default.FUNÇÃO:
217
273
  const simboloFuncao = this.avancarEDevolverAnterior();
@@ -259,6 +315,9 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
259
315
  const tipoInferido = (0, inferenciador_1.inferirTipoVariavel)(simboloNumeroTexto.literal);
260
316
  const tipoDadosElementar = (0, inferenciador_1.tipoInferenciaParaTipoDadosElementar)(tipoInferido);
261
317
  return new construtos_1.Literal(this.hashArquivo, Number(simboloNumeroTexto.linha), simboloNumeroTexto.literal, tipoDadosElementar);
318
+ case delegua_2.default.PARA:
319
+ const simboloPara = this.avancarEDevolverAnterior();
320
+ return this.paraComoConstruto(simboloPara);
262
321
  case delegua_2.default.PARENTESE_ESQUERDO:
263
322
  this.avancarEDevolverAnterior();
264
323
  const expressao = this.expressao();
@@ -722,12 +781,19 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
722
781
  this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA);
723
782
  return new declaracoes_1.Continua(this.simbolos[this.atual - 1]);
724
783
  }
784
+ logicaComumEnquanto() {
785
+ const condicao = this.expressao();
786
+ // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
787
+ const corpo = this.resolverDeclaracao();
788
+ return {
789
+ condicao,
790
+ corpo
791
+ };
792
+ }
725
793
  declaracaoEnquanto() {
726
794
  try {
727
795
  this.blocos += 1;
728
- const condicao = this.expressao();
729
- // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
730
- const corpo = this.resolverDeclaracao();
796
+ const { condicao, corpo } = this.logicaComumEnquanto();
731
797
  return new declaracoes_1.Enquanto(condicao, corpo);
732
798
  }
733
799
  finally {
@@ -820,13 +886,19 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
820
886
  const simboloFalha = this.simbolos[this.atual - 1];
821
887
  return new declaracoes_1.Falhar(simboloFalha, this.declaracaoExpressao().expressao);
822
888
  }
823
- declaracaoFazer() {
824
- const simboloFazer = this.simbolos[this.atual - 1];
889
+ logicaComumFazer() {
890
+ const caminhoFazer = this.resolverDeclaracao();
891
+ this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
892
+ const condicaoEnquanto = this.expressao();
893
+ return {
894
+ caminhoFazer,
895
+ condicaoEnquanto
896
+ };
897
+ }
898
+ declaracaoFazer(simboloFazer) {
825
899
  try {
826
900
  this.blocos += 1;
827
- const caminhoFazer = this.resolverDeclaracao();
828
- this.consumir(delegua_2.default.ENQUANTO, "Esperado declaração do 'enquanto' após o escopo do 'fazer'.");
829
- const condicaoEnquanto = this.expressao();
901
+ const { caminhoFazer, condicaoEnquanto } = this.logicaComumFazer();
830
902
  return new declaracoes_1.Fazer(simboloFazer.hashArquivo, Number(simboloFazer.linha), caminhoFazer, // TODO: Aqui pode ser um `Bloco`?
831
903
  condicaoEnquanto);
832
904
  }
@@ -858,7 +930,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
858
930
  this.blocos -= 1;
859
931
  }
860
932
  }
861
- declaracaoParaCadaDicionario(simboloPara) {
933
+ logicaParaCadaDicionario(simboloPara) {
862
934
  this.avancarEDevolverAnterior(); // chave esquerda
863
935
  const nomeVariavelChave = this.consumir(delegua_2.default.IDENTIFICADOR, "Esperado identificador de variável para chave de iteração, em instrução 'para cada'.");
864
936
  this.consumir(delegua_2.default.VIRGULA, "Esperado vírgula após nome de variável para chave de iteração, em instrução 'para cada'.");
@@ -879,9 +951,18 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
879
951
  this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelValor.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelValor.lexema, 'qualquer'));
880
952
  // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
881
953
  const corpo = this.resolverDeclaracao();
954
+ return {
955
+ nomeVariavelChave,
956
+ nomeVariavelValor,
957
+ dicionario,
958
+ corpo
959
+ };
960
+ }
961
+ declaracaoParaCadaDicionario(simboloPara) {
962
+ const { nomeVariavelChave, nomeVariavelValor, dicionario, corpo } = this.logicaParaCadaDicionario(simboloPara);
882
963
  return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), new tuplas_1.Dupla(new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelChave.lexema), new construtos_1.Literal(this.hashArquivo, Number(simboloPara.linha), nomeVariavelValor.lexema)), dicionario, corpo);
883
964
  }
884
- declaracaoParaCadaVetor(simboloPara) {
965
+ logicaComumParaCadaVetor(simboloPara) {
885
966
  const nomeVariavelIteracao = this.avancarEDevolverAnterior();
886
967
  const variavelIteracao = new construtos_1.Variavel(this.hashArquivo, nomeVariavelIteracao);
887
968
  if (!this.verificarSeSimboloAtualEIgualA(delegua_2.default.DE, delegua_2.default.EM)) {
@@ -902,6 +983,14 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
902
983
  this.pilhaEscopos.definirInformacoesVariavel(nomeVariavelIteracao.lexema, new informacao_variavel_ou_constante_1.InformacaoVariavelOuConstante(nomeVariavelIteracao.lexema, tipoVariavelIteracao));
903
984
  // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
904
985
  const corpo = this.resolverDeclaracao();
986
+ return {
987
+ variavelIteracao,
988
+ vetor,
989
+ corpo
990
+ };
991
+ }
992
+ declaracaoParaCadaVetor(simboloPara) {
993
+ const { variavelIteracao, vetor, corpo } = this.logicaComumParaCadaVetor(simboloPara);
905
994
  return new declaracoes_1.ParaCada(this.hashArquivo, Number(simboloPara.linha), variavelIteracao, vetor, corpo);
906
995
  }
907
996
  declaracaoParaCada(simboloPara) {
@@ -913,7 +1002,7 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
913
1002
  }
914
1003
  throw this.erro(simboloPara, 'Identificador de iteração deve ser ou um par chave-valor, ou um nome de variável.');
915
1004
  }
916
- declaracaoParaTradicional(simboloPara) {
1005
+ logicaComumPara(simboloPara) {
917
1006
  const comParenteses = this.verificarSeSimboloAtualEIgualA(delegua_2.default.PARENTESE_ESQUERDO);
918
1007
  let inicializador;
919
1008
  if (this.verificarSeSimboloAtualEIgualA(delegua_2.default.PONTO_E_VIRGULA)) {
@@ -944,6 +1033,15 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
944
1033
  }
945
1034
  // TODO: Talvez não seja uma ideia melhor chamar o método de `Bloco` aqui?
946
1035
  const corpo = this.resolverDeclaracao();
1036
+ return {
1037
+ inicializador,
1038
+ condicao,
1039
+ incrementar,
1040
+ corpo
1041
+ };
1042
+ }
1043
+ declaracaoParaTradicional(simboloPara) {
1044
+ const { inicializador, condicao, incrementar, corpo } = this.logicaComumPara(simboloPara);
947
1045
  return new declaracoes_1.Para(this.hashArquivo, Number(simboloPara.linha), inicializador, condicao, incrementar, corpo);
948
1046
  }
949
1047
  declaracaoRetorna() {
@@ -1082,8 +1180,8 @@ class AvaliadorSintatico extends avaliador_sintatico_base_1.AvaliadorSintaticoBa
1082
1180
  this.avancarEDevolverAnterior();
1083
1181
  return this.declaracaoFalhar();
1084
1182
  case delegua_2.default.FAZER:
1085
- this.avancarEDevolverAnterior();
1086
- return this.declaracaoFazer();
1183
+ const simboloFazer = this.avancarEDevolverAnterior();
1184
+ return this.declaracaoFazer(simboloFazer);
1087
1185
  case delegua_2.default.LINHA_COMENTARIO:
1088
1186
  return this.declaracaoComentarioMultilinha();
1089
1187
  case delegua_2.default.PARA: