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..9ee08877 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()) { + for (let [indice, argumento] of funcao.parametros.entries()) { const arg1 = expressao.argumentos[indice]; if (arg1) { - if (arg0.tipoDado?.tipo.toLowerCase() === 'caracter' && typeof arg1.valor !== 'string') { + if (argumento.tipoDado?.tipo.toLowerCase() === 'caracter' && typeof arg1.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 '${argumento.nome.lexema}' (${argumento.tipoDado.nome}) é diferente do esperado pela função.` ); } - else if (['inteiro', 'real'].includes(arg0.tipoDado?.tipo.toLowerCase()) + else if (['inteiro', 'real'].includes(argumento.tipoDado?.tipo.toLowerCase()) && typeof arg1.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 '${argumento.nome.lexema}' (${argumento.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';