Repository: DesignLiquido/delegua
Pull request #586 (2024-01-20 18:54:21)

Ajustes feitos pós entrega do Aristides.
- Ajustes em algumas mensagens;
- Movendo interfaces comuns para diretório `interfaces`;
- Testes gerais na extensão e ajustes decorrentes desses testes.


Patch:
diff --git a/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts b/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts
index a342584e..ee688aff 100644
--- a/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts
+++ b/fontes/analisador-semantico/dialetos/analisador-semantico-birl.ts
@@ -31,7 +31,7 @@ import { RetornoAnalisadorSemantico } from '../../interfaces/retornos/retorno-an
 import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../../quebras';
 import { PilhaVariaveis } from '../pilha-variaveis';
 
-interface VariavelHipoteticaInterface {
+interface VariavelHipoteticaBirlInterface {
     tipo:
         | 'texto'
         | 'número'
@@ -50,7 +50,7 @@ interface VariavelHipoteticaInterface {
 
 export class AnalisadorSemanticoBirl implements AnalisadorSemanticoInterface {
     pilhaVariaveis: PilhaVariaveis;
-    variaveis: { [nomeVariavel: string]: VariavelHipoteticaInterface };
+    variaveis: { [nomeVariavel: string]: VariavelHipoteticaBirlInterface };
     atual: number;
     diagnosticos: DiagnosticoAnalisadorSemantico[];
 
diff --git a/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts b/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts
index d4dfd68b..73df8399 100644
--- a/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts
+++ b/fontes/analisador-semantico/dialetos/analisador-semantico-mapler.ts
@@ -29,22 +29,12 @@ import {
 import { SimboloInterface } from '../../interfaces';
 import { AnalisadorSemanticoInterface } from '../../interfaces/analisador-semantico-interface';
 import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from '../../interfaces/erros';
+import { FuncaoHipoteticaInterface } from '../../interfaces/funcao-hipotetica-interface';
 import { RetornoAnalisadorSemantico } from '../../interfaces/retornos/retorno-analisador-semantico';
-import { TiposDadosInterface } from '../../interfaces/tipos-dados-interface';
+import { VariavelHipoteticaInterface } from '../../interfaces/variavel-hipotetica-interface';
 import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from '../../quebras';
 import { PilhaVariaveis } from './../pilha-variaveis';
 
-interface VariavelHipoteticaInterface {
-    tipo: TiposDadosInterface;
-    subtipo?: 'texto' | 'número' | 'inteiro' | 'longo' | 'lógico';
-    imutavel: boolean;
-    valor?: any
-}
-
-interface FuncaoHipoteticaInterface {
-    valor: any
-}
-
 export class AnalisadorSemanticoMapler implements AnalisadorSemanticoInterface {
     pilhaVariaveis: PilhaVariaveis;
     variaveis: { [nomeVariavel: string]: VariavelHipoteticaInterface };
diff --git a/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts b/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts
index b4c6540a..aed06c59 100644
--- a/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts
+++ b/fontes/analisador-semantico/dialetos/analisador-semantico-visualg.ts
@@ -28,23 +28,14 @@ import {
 import { SimboloInterface } from "../../interfaces";
 import { AnalisadorSemanticoInterface } from "../../interfaces/analisador-semantico-interface";
 import { DiagnosticoAnalisadorSemantico, DiagnosticoSeveridade } from "../../interfaces/erros";
+import { FuncaoHipoteticaInterface } from "../../interfaces/funcao-hipotetica-interface";
 import { RetornoAnalisadorSemantico } from "../../interfaces/retornos/retorno-analisador-semantico";
-import { TiposDadosInterface } from "../../interfaces/tipos-dados-interface";
+import { VariavelHipoteticaInterface } from "../../interfaces/variavel-hipotetica-interface";
 import { ContinuarQuebra, RetornoQuebra, SustarQuebra } from "../../quebras";
 import { PilhaVariaveis } from "../pilha-variaveis";
 
-interface VariavelHipoteticaInterface {
-    tipo: TiposDadosInterface;
-    subtipo?: 'texto' | 'número' | 'inteiro' | 'longo' | 'lógico';
-    imutavel: boolean;
-    valor?: any
-}
-
-interface FuncaoHipoteticaInterface {
-    valor: any
-}
 
-export class AnalisadorSemanticoVisualg implements AnalisadorSemanticoInterface {
+export class AnalisadorSemanticoVisuAlg implements AnalisadorSemanticoInterface {
     pilhaVariaveis: PilhaVariaveis;
     variaveis: { [nomeVariavel: string]: VariavelHipoteticaInterface };
     funcoes: { [nomeFuncao: string]: FuncaoHipoteticaInterface }
@@ -267,7 +258,7 @@ export class AnalisadorSemanticoVisualg implements AnalisadorSemanticoInterface
             if (!funcaoChamada) {
                 this.erro(
                     variavel.simbolo,
-                    `Função '${variavel.simbolo.lexema} não foi declarada.'`
+                    `Função '${variavel.simbolo.lexema}' não foi declarada.`
                 )
                 return Promise.resolve();
             }
@@ -279,20 +270,20 @@ export class AnalisadorSemanticoVisualg implements AnalisadorSemanticoInterface
                 )
             }
 
-            for (let [indice, arg0] of funcao.parametros.entries()) {
-                const arg1 = expressao.argumentos[indice];
-                if (arg1) {
-                    if (arg0.tipoDado?.tipo.toLowerCase() === 'caracter' && typeof arg1.valor !== 'string') {
+            for (let [indice, argumentoFuncao] of funcao.parametros.entries()) {
+                const argumentoChamada = expressao.argumentos[indice];
+                if (argumentoChamada) {
+                    if (argumentoFuncao.tipoDado?.tipo.toLowerCase() === 'caracter' && typeof argumentoChamada.valor !== 'string') {
                         this.erro(
                             variavel.simbolo,
-                            `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`
+                            `O tipo do valor passado para o parâmetro '${argumentoFuncao.nome.lexema}' (${argumentoFuncao.tipoDado.nome}) é diferente do esperado pela função.`
                         );
                     }
-                    else if (['inteiro', 'real'].includes(arg0.tipoDado?.tipo.toLowerCase())
-                        && typeof arg1.valor !== 'number') {
+                    else if (['inteiro', 'real'].includes(argumentoFuncao.tipoDado?.tipo.toLowerCase())
+                        && typeof argumentoChamada.valor !== 'number') {
                         this.erro(
                             variavel.simbolo,
-                            `O valor passado para o parâmetro '${arg0.tipoDado.nome}' é diferente do esperado pela função.`
+                            `O tipo do valor passado para o parâmetro '${argumentoFuncao.nome.lexema}' (${argumentoFuncao.tipoDado.nome}) é diferente do esperado pela função.`
                         );
                     }
                 }
diff --git a/fontes/interfaces/dialeto/interpretador-birl-interface.ts b/fontes/interfaces/dialetos/interpretador-birl-interface.ts
similarity index 100%
rename from fontes/interfaces/dialeto/interpretador-birl-interface.ts
rename to fontes/interfaces/dialetos/interpretador-birl-interface.ts
diff --git a/fontes/interfaces/funcao-hipotetica-interface.ts b/fontes/interfaces/funcao-hipotetica-interface.ts
new file mode 100644
index 00000000..1f0ce3ca
--- /dev/null
+++ b/fontes/interfaces/funcao-hipotetica-interface.ts
@@ -0,0 +1,3 @@
+export interface FuncaoHipoteticaInterface {
+    valor: any
+}
diff --git a/fontes/interfaces/variavel-hipotetica-interface.ts b/fontes/interfaces/variavel-hipotetica-interface.ts
new file mode 100644
index 00000000..9a55fb25
--- /dev/null
+++ b/fontes/interfaces/variavel-hipotetica-interface.ts
@@ -0,0 +1,8 @@
+import { TiposDadosInterface } from "./tipos-dados-interface";
+
+export interface VariavelHipoteticaInterface {
+    tipo: TiposDadosInterface;
+    subtipo?: 'texto' | 'número' | 'inteiro' | 'longo' | 'lógico';
+    imutavel: boolean;
+    valor?: any
+}
diff --git a/fontes/interpretador/dialetos/birl/comum.ts b/fontes/interpretador/dialetos/birl/comum.ts
index 99485892..6581d8e6 100644
--- a/fontes/interpretador/dialetos/birl/comum.ts
+++ b/fontes/interpretador/dialetos/birl/comum.ts
@@ -2,7 +2,7 @@ import { AcessoIndiceVariavel, Construto, Literal, Variavel } from '../../../con
 import { Declaracao, Leia, Para } from '../../../declaracoes';
 import { EspacoVariaveis } from '../../../espaco-variaveis';
 import { ErroEmTempoDeExecucao } from '../../../excecoes';
-import { InterpretadorBirlInterface } from '../../../interfaces/dialeto/interpretador-birl-interface';
+import { InterpretadorBirlInterface } from '../../../interfaces/dialetos/interpretador-birl-interface';
 import { EscopoExecucao } from '../../../interfaces/escopo-execucao';
 import { RetornoInterpretador } from '../../../interfaces/retornos';
 import { ContinuarQuebra, Quebra, SustarQuebra } from '../../../quebras';
diff --git a/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts b/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts
index 20e2232a..115b7204 100644
--- a/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts
+++ b/fontes/interpretador/dialetos/birl/interpretador-birl-com-depuracao.ts
@@ -1,6 +1,6 @@
 import { Construto, Literal } from '../../../construtos';
 import { Declaracao, Leia, Para } from '../../../declaracoes';
-import { InterpretadorBirlInterface } from '../../../interfaces/dialeto/interpretador-birl-interface';
+import { InterpretadorBirlInterface } from '../../../interfaces/dialetos/interpretador-birl-interface';
 import { RetornoInterpretador } from '../../../interfaces/retornos';
 import { InterpretadorComDepuracao } from '../../interpretador-com-depuracao';
 import * as comum from './comum';


Test patch:
diff --git a/testes/visualg/analisador-semantico.test.ts b/testes/visualg/analisador-semantico.test.ts
index 88961e4c..57130268 100644
--- a/testes/visualg/analisador-semantico.test.ts
+++ b/testes/visualg/analisador-semantico.test.ts
@@ -1,4 +1,4 @@
-import { AnalisadorSemanticoVisualg } from '../../fontes/analisador-semantico/dialetos/analisador-semantico-visualg'
+import { AnalisadorSemanticoVisuAlg } from '../../fontes/analisador-semantico/dialetos/analisador-semantico-visualg'
 import { AvaliadorSintaticoVisuAlg } from "../../fontes/avaliador-sintatico/dialetos";
 import { LexadorVisuAlg } from "../../fontes/lexador/dialetos";
 
@@ -6,12 +6,12 @@ describe('Analisador sêmantico (Visualg)', () => {
     describe('analisar()', () => {
         let lexador: LexadorVisuAlg;
         let avaliadorSintaticoVisuAlg: AvaliadorSintaticoVisuAlg;
-        let analisadorSemanticoVisualg: AnalisadorSemanticoVisualg
+        let analisadorSemanticoVisualg: AnalisadorSemanticoVisuAlg
 
         beforeEach(() => {
             lexador = new LexadorVisuAlg();
             avaliadorSintaticoVisuAlg = new AvaliadorSintaticoVisuAlg();
-            analisadorSemanticoVisualg = new AnalisadorSemanticoVisualg();
+            analisadorSemanticoVisualg = new AnalisadorSemanticoVisuAlg();
         });