New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@designliquido/delegua

Package Overview
Dependencies
Maintainers
3
Versions
271
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@designliquido/delegua - npm Package Compare versions

Comparing version 0.6.0 to 0.6.1

fontes/interfaces/variavel-interface.d.ts

11

bin/package.json
{
"name": "@designliquido/delegua",
"version": "0.5.4",
"version": "0.6.0",
"description": "Linguagem de programação simples e moderna usando português",

@@ -39,2 +39,6 @@ "main": "index.ts",

"url": "https://www.linkedin.com/in/samuel-renan-gon%C3%A7alves-vaz-b6b83a103/"
},
{
"name": "Alessandro Fuhr de Mello",
"url": "https://github.com/AlessandroFMello"
}

@@ -56,3 +60,6 @@ ],

"ts-node": "^10.7.0",
"typescript": "^4.6.3"
"typescript": "^4.6.3",
"@designliquido/delegua-estatistica": "^0.0.5",
"@designliquido/delegua-fisica": "^0.0.2",
"@designliquido/delegua-matematica": "^0.0.2"
},

@@ -59,0 +66,0 @@ "dependencies": {

5

fontes/ambiente.d.ts

@@ -0,4 +1,7 @@

import { VariavelInterface } from "./interfaces";
export declare class Ambiente {
valores: any;
valores: {
[nome: string]: VariavelInterface;
};
constructor();
}

@@ -16,8 +16,11 @@ "use strict";

pilhaEscoposExecucao.definirVariavel("aleatorioEntre", new funcao_padrao_1.FuncaoPadrao(1, function (minimo, maximo) {
if (typeof minimo !== 'number' || typeof maximo !== 'number') {
var valorMinimo = minimo.hasOwnProperty('valor') ? minimo.valor : minimo;
var valorMaximo = maximo.hasOwnProperty('valor') ? maximo.valor : maximo;
if (typeof valorMinimo !== 'number' || typeof valorMaximo !== 'number') {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Os dois parâmetros devem ser do tipo número.");
}
return Math.floor(Math.random() * (maximo - minimo)) + minimo;
return Math.floor(Math.random() * (valorMaximo - valorMinimo)) + valorMinimo;
}));
pilhaEscoposExecucao.definirVariavel("inteiro", new funcao_padrao_1.FuncaoPadrao(1, function (valor) {
pilhaEscoposExecucao.definirVariavel("inteiro", new funcao_padrao_1.FuncaoPadrao(1, function (numero) {
var valor = numero.hasOwnProperty('valor') ? numero.valor : numero;
if (isNaN(valor)) {

@@ -31,19 +34,22 @@ throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Valor não parece ser um número. Somente números ou textos com números podem ser convertidos para inteiro.");

}));
pilhaEscoposExecucao.definirVariavel("mapear", new funcao_padrao_1.FuncaoPadrao(1, function (array, callback) {
if (!Array.isArray(array)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Parâmetro inválido. O primeiro parâmetro da função, deve ser um array.");
pilhaEscoposExecucao.definirVariavel("mapear", new funcao_padrao_1.FuncaoPadrao(1, function (vetor, funcaoMapeamento) {
var valorVetor = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
var valorFuncaoMapeamento = funcaoMapeamento.hasOwnProperty('valor') ? funcaoMapeamento.valor : funcaoMapeamento;
if (!Array.isArray(valorVetor)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Parâmetro inválido. O primeiro parâmetro da função mapear() deve ser um vetor.");
}
if (callback.constructor.name !== 'DeleguaFuncao') {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Parâmetro inválido. O segundo parâmetro da função, deve ser uma função.");
if (valorFuncaoMapeamento.constructor.name !== 'DeleguaFuncao') {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Parâmetro inválido. O segundo parâmetro da função mapear() deve ser uma função.");
}
var resultados = [];
for (var indice = 0; indice < array.length; ++indice) {
resultados.push(callback.chamar(interpretador, [array[indice]]));
for (var indice = 0; indice < valorVetor.length; ++indice) {
resultados.push(valorFuncaoMapeamento.chamar(interpretador, [valorVetor[indice]]));
}
return resultados;
}));
pilhaEscoposExecucao.definirVariavel("ordenar", new funcao_padrao_1.FuncaoPadrao(1, function (objeto) {
pilhaEscoposExecucao.definirVariavel("ordenar", new funcao_padrao_1.FuncaoPadrao(1, function (vetor) {
var _a;
var objeto = vetor.hasOwnProperty('valor') ? vetor.valor : vetor;
if (!Array.isArray(objeto)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Valor Inválido. Objeto inserido não é um vetor.");
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Valor inválido. Objeto inserido não é um vetor.");
}

@@ -63,32 +69,35 @@ var trocado;

}));
pilhaEscoposExecucao.definirVariavel("real", new funcao_padrao_1.FuncaoPadrao(1, function (valor) {
if (!/^-{0,1}\d+$/.test(valor) && !/^\d+\.\d+$/.test(valor))
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Somente números podem passar para real.");
pilhaEscoposExecucao.definirVariavel("real", new funcao_padrao_1.FuncaoPadrao(1, function (numero) {
var valor = numero.hasOwnProperty('valor') ? numero.valor : numero;
if (!/^(-)?\d+(\.\d+)?$/.test(valor)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Valor não parece estar estruturado como um número (texto/valor vazio, falso ou não definido). Somente números ou textos com números podem ser convertidos para real.");
}
return parseFloat(valor);
}));
pilhaEscoposExecucao.definirVariavel("tamanho", new funcao_padrao_1.FuncaoPadrao(1, function (objeto) {
if (!isNaN(objeto)) {
var valorObjeto = objeto.hasOwnProperty('valor') ? objeto.valor : objeto;
if (!isNaN(valorObjeto)) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Não é possível encontrar o tamanho de um número.");
}
if (objeto instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
if (valorObjeto instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {
throw new excecoes_1.ErroEmTempoDeExecucao(this.simbolo, "Você não pode encontrar o tamanho de uma declaração.");
}
if (objeto instanceof funcao_1.DeleguaFuncao) {
return objeto.declaracao.parametros.length;
if (valorObjeto instanceof funcao_1.DeleguaFuncao) {
return valorObjeto.declaracao.parametros.length;
}
if (objeto instanceof funcao_padrao_1.FuncaoPadrao) {
return objeto.valorAridade;
if (valorObjeto instanceof funcao_padrao_1.FuncaoPadrao) {
return valorObjeto.valorAridade;
}
if (objeto instanceof delegua_classe_1.DeleguaClasse) {
var metodos = objeto.metodos;
if (valorObjeto instanceof delegua_classe_1.DeleguaClasse) {
var metodos = valorObjeto.metodos;
var tamanho = 0;
if (metodos.init && metodos.init.eInicializador) {
tamanho = metodos.init.declaracao.parametros.length;
if (metodos.inicializacao && metodos.inicializacao.eInicializador) {
tamanho = metodos.inicializacao.declaracao.parametros.length;
}
return tamanho;
}
return objeto.length;
return valorObjeto.length;
}));
pilhaEscoposExecucao.definirVariavel("texto", new funcao_padrao_1.FuncaoPadrao(1, function (valor) {
return "".concat(valor);
pilhaEscoposExecucao.definirVariavel("texto", new funcao_padrao_1.FuncaoPadrao(1, function (valorOuVariavel) {
return "".concat(valorOuVariavel.hasOwnProperty('valor') ? valorOuVariavel.valor : valorOuVariavel);
}));

@@ -95,0 +104,0 @@ return pilhaEscoposExecucao;

@@ -27,4 +27,21 @@ "use strict";

};
var verificaModulosDelegua = function (nome) {
var modulos = {
"estatistica": "@designliquido/delegua-estatistica",
"estatística": "@designliquido/delegua-estatistica",
"fisica": "@designliquido/delegua-fisica",
"física": "@designliquido/delegua-fisica",
"matematica": "@designliquido/delegua-matematica",
"matemática": "@designliquido/delegua-matematica",
};
if (Object.keys(modulos).includes(nome)) {
return modulos[nome].toString();
}
;
return false;
};
function default_1(nome) {
return carregarBiblioteca(nome, nome);
var verificaModulos = verificaModulosDelegua(nome);
return (verificaModulos
? (carregarBiblioteca(verificaModulos, verificaModulos)) : (carregarBiblioteca(nome, nome)));
}

@@ -31,0 +48,0 @@ exports.default = default_1;

@@ -0,1 +1,2 @@

import { InterpretadorInterface, SimboloInterface } from "../interfaces";
import { Construto } from "./construto";

@@ -10,6 +11,6 @@ /**

entidadeChamada: Construto;
simboloFechamento: any;
simboloFechamento: SimboloInterface;
indice: any;
constructor(hashArquivo: number, entidadeChamada: Construto, indice: any, simboloFechamento: any);
aceitar(visitante: any): any;
constructor(hashArquivo: number, entidadeChamada: Construto, indice: any, simboloFechamento: SimboloInterface);
aceitar(visitante: InterpretadorInterface): any;
}

@@ -1,2 +0,2 @@

import { InterpretadorInterface, SimboloInterface } from "../interfaces";
import { InterpretadorInterface, SimboloInterface, VariavelInterface } from "../interfaces";
import { Construto } from "./construto";

@@ -8,3 +8,3 @@ export declare class Variavel implements Construto {

constructor(hashArquivo: number, simbolo: SimboloInterface);
aceitar(visitante: InterpretadorInterface): any;
aceitar(visitante: InterpretadorInterface): VariavelInterface;
}

@@ -7,4 +7,6 @@ import { InterpretadorInterface } from "../interfaces";

nome: string;
superClasse: any;
metodos: any;
superClasse: DeleguaClasse;
metodos: {
[nome: string]: DeleguaFuncao;
};
constructor(nome?: string, superClasse?: any, metodos?: any);

@@ -11,0 +13,0 @@ encontrarMetodo(nome: string): DeleguaFuncao;

@@ -58,3 +58,3 @@ "use strict";

if (this.instancia !== undefined) {
ambiente.valores['isto'] = this.instancia;
ambiente.valores['isto'] = { valor: this.instancia, tipo: "objeto" };
}

@@ -61,0 +61,0 @@ var retornoBloco = interpretador.executarBloco(this.declaracao.corpo, ambiente);

@@ -11,1 +11,2 @@ export * from './avaliador-sintatico-interface';

export * from './simbolo-interface';
export * from './variavel-interface';

@@ -27,2 +27,3 @@ "use strict";

__exportStar(require("./simbolo-interface"), exports);
__exportStar(require("./variavel-interface"), exports);
//# sourceMappingURL=index.js.map

@@ -5,12 +5,13 @@ import { DeleguaFuncao } from "../estruturas";

import { SimboloInterface } from "./simbolo-interface";
import { VariavelInterface } from "./variavel-interface";
export interface PilhaEscoposExecucaoInterface extends PilhaInterface<EscopoExecucao> {
atribuirVariavel(simbolo: SimboloInterface, valor: any): void;
atribuirVariavelEm(distancia: number, simbolo: any, valor: any): void;
atribuirVariavelEm(distancia: number, simbolo: SimboloInterface, valor: any): void;
definirVariavel(nomeVariavel: string, valor: any): void;
elementos(): number;
naPosicao(posicao: number): EscopoExecucao;
obterTodasVariaveis(todasVariaveis: any[]): any[];
obterVariavel(simbolo: SimboloInterface): any;
obterVariavelEm(distancia: number, nome: string): any;
obterVariavelPorNome(nome: string): any;
obterTodasVariaveis(todasVariaveis: any[]): VariavelInterface[];
obterVariavel(simbolo: SimboloInterface): VariavelInterface;
obterVariavelEm(distancia: number, nome: string): VariavelInterface;
obterVariavelPorNome(nome: string): VariavelInterface;
obterTodasDeleguaFuncao(): {

@@ -17,0 +18,0 @@ [nome: string]: DeleguaFuncao;

import { Ambiente } from '../../ambiente';
import { Delegua } from '../../delegua';
import { DeleguaFuncao } from '../../estruturas/funcao';
import { InterpretadorInterface, SimboloInterface, ResolvedorInterface } from '../../interfaces';
import { InterpretadorInterface, SimboloInterface, ResolvedorInterface, VariavelInterface } from '../../interfaces';
import { Classe, Declaracao, Enquanto, Escolha, Escreva, Expressao, Fazer, Funcao, Importar, Para, Se, Tente, Var } from '../../declaracoes';
import { Atribuir, Construto, Literal, Super, Variavel } from '../../construtos';
import { AcessoIndiceVariavel, Atribuir, Construto, Literal, Super, Variavel } from '../../construtos';
import { RetornoInterpretador } from '../../interfaces/retornos/retorno-interpretador';

@@ -25,3 +25,3 @@ import { ErroInterpretador } from '../erro-interpretador';

visitarExpressaoLiteral(expressao: Literal): any;
avaliar(expressao: Construto): any;
avaliar(expressao: Construto): VariavelInterface | any;
visitarExpressaoAgrupamento(expressao: any): any;

@@ -31,9 +31,9 @@ eVerdadeiro(objeto: any): boolean;

visitarExpressaoUnaria(expr: any): number | boolean;
eIgual(esquerda: any, direita: any): boolean;
verificarOperandosNumeros(operador: any, direita: any, esquerda: any): void;
visitarExpressaoBinaria(expressao: any): string | number | boolean;
eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
verificarOperandosNumeros(operador: any, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
visitarExpressaoBinaria(expressao: any): any;
visitarExpressaoDeChamada(expressao: any): any;
visitarExpressaoDeAtribuicao(expressao: Atribuir): any;
procurarVariavel(simbolo: SimboloInterface, expressao: any): any;
visitarExpressaoDeVariavel(expressao: Variavel): any;
procurarVariavel(simbolo: SimboloInterface, expressao: any): VariavelInterface;
visitarExpressaoDeVariavel(expressao: Variavel): VariavelInterface;
visitarDeclaracaoDeExpressao(declaracao: Expressao): any;

@@ -63,3 +63,3 @@ visitarExpressaoLogica(expressao: any): any;

visitarExpressaoAtribuicaoSobrescrita(expressao: any): void;
visitarExpressaoAcessoIndiceVariavel(expressao: any): any;
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel | any): any;
visitarExpressaoDefinir(expressao: any): any;

@@ -69,3 +69,3 @@ visitarExpressaoFuncao(declaracao: Funcao): void;

visitarExpressaoAcessoMetodo(expressao: any): any;
visitarExpressaoIsto(expressao: any): any;
visitarExpressaoIsto(expressao: any): VariavelInterface;
visitarExpressaoDicionario(expressao: any): {};

@@ -75,5 +75,13 @@ visitarExpressaoVetor(expressao: any): any[];

paraTexto(objeto: any): any;
executar(declaracao: Declaracao, mostrarResultado?: boolean): void;
executarUltimoEscopo(): void;
executar(declaracao: Declaracao, mostrarResultado?: boolean): any;
/**
* Executa o último escopo empilhado no topo na pilha de escopos do Interpretador.
* Originalmente, Égua não trabalha com uma pilha de escopos.
* Essa implementação é derivada do Interpretador de Delégua, mas simulando todos os
* comportamos do interpretador Égua original.
* Interpretador Égua: https://github.com/eguatech/egua/blob/master/src/interpreter.js
* @returns O resultado da execução do escopo, se houver.
*/
executarUltimoEscopo(): any;
interpretar(declaracoes: Declaracao[]): RetornoInterpretador;
}

@@ -46,2 +46,3 @@ "use strict";

var quebras_1 = require("../../quebras");
var inferenciador_1 = require("../inferenciador");
/**

@@ -103,2 +104,9 @@ * O Interpretador visita todos os elementos complexos gerados pelo analisador sintático (Parser)

InterpretadorEguaClassico.prototype.eIgual = function (esquerda, direita) {
if (esquerda.tipo) {
if (esquerda.tipo === "nulo" && direita.tipo && direita.tipo === "nulo")
return true;
if (esquerda.tipo === "nulo")
return false;
return esquerda.valor === direita.valor;
}
if (esquerda === null && direita === null)

@@ -111,3 +119,5 @@ return true;

InterpretadorEguaClassico.prototype.verificarOperandosNumeros = function (operador, direita, esquerda) {
if (typeof direita === 'number' && typeof esquerda === 'number')
var tipoDireita = direita.tipo ? direita.tipo : (typeof direita === 'number' ? 'número' : String(NaN));
var tipoEsquerda = esquerda.tipo ? esquerda.tipo : (typeof esquerda === 'number' ? 'número' : String(NaN));
if (tipoDireita === "número" && tipoEsquerda === "número")
return;

@@ -119,28 +129,32 @@ throw new excecoes_1.ErroEmTempoDeExecucao(operador, 'Operadores precisam ser números.', operador.linha);

var direita = this.avaliar(expressao.direita);
var valorEsquerdo = esquerda.hasOwnProperty('valor') ? esquerda.valor : esquerda;
var valorDireito = direita.hasOwnProperty('valor') ? direita.valor : direita;
var tipoEsquerdo = esquerda.hasOwnProperty('tipo') ? esquerda.tipo : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
var tipoDireito = direita.hasOwnProperty('tipo') ? direita.tipo : (0, inferenciador_1.inferirTipoVariavel)(direita);
switch (expressao.operador.tipo) {
case tipos_de_simbolos_1.default.EXPONENCIACAO:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Math.pow(esquerda, direita);
return Math.pow(valorEsquerdo, valorDireito);
case tipos_de_simbolos_1.default.MAIOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) > Number(direita);
return Number(valorEsquerdo) > Number(valorDireito);
case tipos_de_simbolos_1.default.MAIOR_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) >= Number(direita);
return Number(valorEsquerdo) >= Number(valorDireito);
case tipos_de_simbolos_1.default.MENOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) < Number(direita);
return Number(valorEsquerdo) < Number(valorDireito);
case tipos_de_simbolos_1.default.MENOR_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) <= Number(direita);
return Number(valorEsquerdo) <= Number(valorDireito);
case tipos_de_simbolos_1.default.SUBTRACAO:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) - Number(direita);
return Number(valorEsquerdo) - Number(valorDireito);
case tipos_de_simbolos_1.default.ADICAO:
if (typeof esquerda === 'number' &&
typeof direita === 'number') {
if (tipoEsquerdo === 'número' &&
tipoDireito === 'número') {
return Number(esquerda) + Number(direita);
}
else if (typeof esquerda === 'string' &&
typeof direita === 'string') {
else if (tipoEsquerdo === 'texto' &&
tipoDireito === 'texto') {
return String(esquerda) + String(direita);

@@ -151,28 +165,28 @@ }

this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) / Number(direita);
return Number(valorEsquerdo) / Number(valorDireito);
case tipos_de_simbolos_1.default.MULTIPLICACAO:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) * Number(direita);
return Number(valorEsquerdo) * Number(valorDireito);
case tipos_de_simbolos_1.default.MODULO:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) % Number(direita);
return Number(valorEsquerdo) % Number(valorDireito);
case tipos_de_simbolos_1.default.BIT_AND:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) & Number(direita);
return Number(valorEsquerdo) & Number(valorDireito);
case tipos_de_simbolos_1.default.BIT_XOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) ^ Number(direita);
return Number(valorEsquerdo) ^ Number(valorDireito);
case tipos_de_simbolos_1.default.BIT_OR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) | Number(direita);
return Number(valorEsquerdo) | Number(valorDireito);
case tipos_de_simbolos_1.default.MENOR_MENOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) << Number(direita);
return Number(valorEsquerdo) << Number(valorDireito);
case tipos_de_simbolos_1.default.MAIOR_MAIOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) >> Number(direita);
return Number(valorEsquerdo) >> Number(valorDireito);
case tipos_de_simbolos_1.default.DIFERENTE:
return !this.eIgual(esquerda, direita);
return !this.eIgual(valorEsquerdo, valorDireito);
case tipos_de_simbolos_1.default.IGUAL_IGUAL:
return this.eIgual(esquerda, direita);
return this.eIgual(valorEsquerdo, valorDireito);
}

@@ -182,3 +196,4 @@ return null;

InterpretadorEguaClassico.prototype.visitarExpressaoDeChamada = function (expressao) {
var entidadeChamada = this.avaliar(expressao.entidadeChamada);
var variavelEntidadeChamada = this.avaliar(expressao.entidadeChamada);
var entidadeChamada = variavelEntidadeChamada.valor ? variavelEntidadeChamada.valor : variavelEntidadeChamada;
var argumentos = [];

@@ -196,4 +211,4 @@ for (var i = 0; i < expressao.argumentos.length; i++) {

else if (entidadeChamada instanceof delegua_classe_1.DeleguaClasse) {
parametros = entidadeChamada.metodos.init
? entidadeChamada.metodos.init.declaracao.parametros
parametros = entidadeChamada.metodos.inicializacao
? entidadeChamada.metodos.inicializacao.declaracao.parametros
: [];

@@ -267,4 +282,3 @@ }

if (this.eVerdadeiro(this.avaliar(declaracao.condicao))) {
this.executar(declaracao.caminhoEntao);
return null;
return this.executar(declaracao.caminhoEntao);
}

@@ -274,8 +288,7 @@ for (var i = 0; i < declaracao.caminhosSeSenao.length; i++) {

if (this.eVerdadeiro(this.avaliar(atual.condicao))) {
this.executar(atual.caminho);
return null;
return this.executar(atual.caminho);
}
}
if (declaracao.caminhoSenao !== null) {
this.executar(declaracao.caminhoSenao);
return this.executar(declaracao.caminhoSenao);
}

@@ -439,4 +452,3 @@ return null;

InterpretadorEguaClassico.prototype.visitarExpressaoBloco = function (declaracao) {
this.executarBloco(declaracao.declaracoes);
return null;
return this.executarBloco(declaracao.declaracoes);
};

@@ -493,3 +505,4 @@ InterpretadorEguaClassico.prototype.visitarExpressaoVar = function (declaracao) {

InterpretadorEguaClassico.prototype.visitarExpressaoAcessoIndiceVariavel = function (expressao) {
var objeto = this.avaliar(expressao.entidadeChamada);
var variavelObjeto = this.avaliar(expressao.entidadeChamada);
var objeto = variavelObjeto.valor ? variavelObjeto.valor : variavelObjeto;
var indice = this.avaliar(expressao.indice);

@@ -557,3 +570,4 @@ if (Array.isArray(objeto)) {

if (declaracao.superClasse !== null) {
superClasse = this.avaliar(declaracao.superClasse);
var variavelSuperClasse = this.avaliar(declaracao.superClasse);
superClasse = variavelSuperClasse.valor;
if (!(superClasse instanceof delegua_classe_1.DeleguaClasse)) {

@@ -575,3 +589,3 @@ throw new excecoes_1.ErroEmTempoDeExecucao(declaracao.superClasse.nome, 'SuperClasse precisa ser uma classe.', declaracao.linha);

}
var criado = new delegua_classe_1.DeleguaClasse(declaracao.simbolo.lexema, superClasse, metodos);
var deleguaClasse = new delegua_classe_1.DeleguaClasse(declaracao.simbolo.lexema, superClasse, metodos);
// TODO: Recolocar isso se for necessário.

@@ -581,7 +595,8 @@ /* if (superClasse !== null) {

} */
this.pilhaEscoposExecucao.atribuirVariavel(declaracao.simbolo, criado);
this.pilhaEscoposExecucao.atribuirVariavel(declaracao.simbolo, deleguaClasse);
return null;
};
InterpretadorEguaClassico.prototype.visitarExpressaoAcessoMetodo = function (expressao) {
var objeto = this.avaliar(expressao.objeto);
var variavelObjeto = this.avaliar(expressao.objeto);
var objeto = variavelObjeto === null || variavelObjeto === void 0 ? void 0 : variavelObjeto.valor;
if (objeto instanceof objeto_delegua_classe_1.ObjetoDeleguaClasse) {

@@ -619,7 +634,7 @@ return objeto.get(expressao.simbolo) || null;

var objeto = this.pilhaEscoposExecucao.obterVariavelEm(distancia - 1, 'isto');
var metodo = superClasse.encontrarMetodo(expressao.metodo.lexema);
var metodo = superClasse.valor.encontrarMetodo(expressao.metodo.lexema);
if (metodo === undefined) {
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.metodo, 'Método chamado indefinido.', expressao.linha);
}
return metodo.definirInstancia(objeto);
return metodo.definirInstancia(objeto.valor);
};

@@ -650,10 +665,20 @@ InterpretadorEguaClassico.prototype.paraTexto = function (objeto) {

if (mostrarResultado === void 0) { mostrarResultado = false; }
declaracao.aceitar(this);
return declaracao.aceitar(this);
};
/**
* Executa o último escopo empilhado no topo na pilha de escopos do Interpretador.
* Originalmente, Égua não trabalha com uma pilha de escopos.
* Essa implementação é derivada do Interpretador de Delégua, mas simulando todos os
* comportamos do interpretador Égua original.
* Interpretador Égua: https://github.com/eguatech/egua/blob/master/src/interpreter.js
* @returns O resultado da execução do escopo, se houver.
*/
InterpretadorEguaClassico.prototype.executarUltimoEscopo = function () {
var ultimoEscopo = this.pilhaEscoposExecucao.topoDaPilha();
try {
for (; ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
var retornoExecucao = void 0;
for (; !(retornoExecucao instanceof quebras_1.Quebra) && ultimoEscopo.declaracaoAtual < ultimoEscopo.declaracoes.length; ultimoEscopo.declaracaoAtual++) {
retornoExecucao = this.executar(ultimoEscopo.declaracoes[ultimoEscopo.declaracaoAtual]);
}
return retornoExecucao;
}

@@ -660,0 +685,0 @@ finally {

import { Ambiente } from '../ambiente';
import { InterpretadorInterface, SimboloInterface } from '../interfaces';
import { InterpretadorInterface, SimboloInterface, VariavelInterface } from '../interfaces';
import { Bloco, Classe, Continua, Declaracao, Enquanto, Escolha, Escreva, Expressao, Fazer, Funcao, Importar, Para, Retorna, Se, Tente, Var } from '../declaracoes';
import { DeleguaFuncao } from '../estruturas';
import { Atribuir, Construto, Literal, Super } from '../construtos';
import { AcessoIndiceVariavel, Atribuir, Construto, Literal, Super } from '../construtos';
import { ErroInterpretador } from './erro-interpretador';

@@ -31,5 +31,18 @@ import { RetornoInterpretador } from '../interfaces/retornos/retorno-interpretador';

visitarExpressaoUnaria(expressao: any): any;
eIgual(esquerda: any, direita: any): boolean;
verificarOperandosNumeros(simbolo: SimboloInterface, direita: any, esquerda: any): void;
visitarExpressaoBinaria(expressao: any): string | number | boolean;
eIgual(esquerda: VariavelInterface | any, direita: VariavelInterface | any): boolean;
/**
* Verifica se operandos são números, que podem ser tanto variáveis puras do JavaScript
* (neste caso, `number`), ou podem ser variáveis de Delégua com inferência (`VariavelInterface`).
* @param operador O símbolo do operador.
* @param direita O operando direito.
* @param esquerda O operando esquerdo.
* @returns Se ambos os operandos são números ou não.
*/
verificarOperandosNumeros(operador: any, direita: VariavelInterface | any, esquerda: VariavelInterface | any): void;
visitarExpressaoBinaria(expressao: any): any;
/**
* Executa uma chamada de função, método ou classe.
* @param expressao A expressão chamada.
* @returns O resultado da chamada.
*/
visitarExpressaoDeChamada(expressao: any): any;

@@ -41,2 +54,8 @@ visitarExpressaoDeAtribuicao(expressao: Atribuir): any;

visitarExpressaoLogica(expressao: any): any;
/**
* Executa uma expressão Se, que tem uma condição, pode ter um bloco
* Senão, e múltiplos blocos Senão-se.
* @param declaracao A declaração Se.
* @returns O resultado da avaliação do bloco cuja condição é verdadeira.
*/
visitarExpressaoSe(declaracao: Se): any;

@@ -49,2 +68,8 @@ visitarExpressaoPara(declaracao: Para): any;

visitarExpressaoImportar(declaracao: Importar): any;
/**
* Execução de uma escrita na saída configurada, que pode ser `console` (padrão) ou
* alguma função para escrever numa página Web.
* @param declaracao A declaração.
* @returns Sempre nulo, por convenção de visita.
*/
visitarExpressaoEscreva(declaracao: Escreva): any;

@@ -65,6 +90,16 @@ /**

visitarExpressaoAtribuicaoSobrescrita(expressao: any): void;
visitarExpressaoAcessoIndiceVariavel(expressao: any): any;
visitarExpressaoAcessoIndiceVariavel(expressao: AcessoIndiceVariavel | any): any;
visitarExpressaoDefinir(expressao: any): any;
visitarExpressaoFuncao(declaracao: Funcao): void;
/**
* Executa uma declaração de classe.
* @param declaracao A declaração de classe.
* @returns Sempre retorna nulo, por ser requerido pelo contrato de visita.
*/
visitarExpressaoClasse(declaracao: Classe): any;
/**
* Executa um acesso a método, normalmente de um objeto de classe.
* @param expressao A expressão de acesso.
* @returns O resultado da execução.
*/
visitarExpressaoAcessoMetodo(expressao: any): any;

@@ -71,0 +106,0 @@ visitarExpressaoIsto(expressao: any): any;

@@ -40,2 +40,3 @@ "use strict";

var quebras_1 = require("../quebras");
var inferenciador_1 = require("./inferenciador");
/**

@@ -100,2 +101,9 @@ * O Interpretador visita todos os elementos complexos gerados pelo avaliador sintático (Parser),

Interpretador.prototype.eIgual = function (esquerda, direita) {
if (esquerda.tipo) {
if (esquerda.tipo === "nulo" && direita.tipo && direita.tipo === "nulo")
return true;
if (esquerda.tipo === "nulo")
return false;
return esquerda.valor === direita.valor;
}
if (esquerda === null && direita === null)

@@ -107,6 +115,16 @@ return true;

};
Interpretador.prototype.verificarOperandosNumeros = function (simbolo, direita, esquerda) {
if (typeof direita === 'number' && typeof esquerda === 'number')
/**
* Verifica se operandos são números, que podem ser tanto variáveis puras do JavaScript
* (neste caso, `number`), ou podem ser variáveis de Delégua com inferência (`VariavelInterface`).
* @param operador O símbolo do operador.
* @param direita O operando direito.
* @param esquerda O operando esquerdo.
* @returns Se ambos os operandos são números ou não.
*/
Interpretador.prototype.verificarOperandosNumeros = function (operador, direita, esquerda) {
var tipoDireita = direita.tipo ? direita.tipo : (typeof direita === 'number' ? 'número' : String(NaN));
var tipoEsquerda = esquerda.tipo ? esquerda.tipo : (typeof esquerda === 'number' ? 'número' : String(NaN));
if (tipoDireita === "número" && tipoEsquerda === "número")
return;
throw new excecoes_1.ErroEmTempoDeExecucao(simbolo, 'Operandos precisam ser números.', Number(simbolo.linha));
throw new excecoes_1.ErroEmTempoDeExecucao(operador, 'Operadores precisam ser números.', operador.linha);
};

@@ -116,30 +134,34 @@ Interpretador.prototype.visitarExpressaoBinaria = function (expressao) {

var direita = this.avaliar(expressao.direita);
var valorEsquerdo = esquerda.hasOwnProperty('valor') ? esquerda.valor : esquerda;
var valorDireito = direita.hasOwnProperty('valor') ? direita.valor : direita;
var tipoEsquerdo = esquerda.hasOwnProperty('tipo') ? esquerda.tipo : (0, inferenciador_1.inferirTipoVariavel)(esquerda);
var tipoDireito = direita.hasOwnProperty('tipo') ? direita.tipo : (0, inferenciador_1.inferirTipoVariavel)(direita);
switch (expressao.operador.tipo) {
case tipos_de_simbolos_1.default.EXPONENCIACAO:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Math.pow(esquerda, direita);
return Math.pow(valorEsquerdo, valorDireito);
case tipos_de_simbolos_1.default.MAIOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) > Number(direita);
return Number(valorEsquerdo) > Number(valorDireito);
case tipos_de_simbolos_1.default.MAIOR_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) >= Number(direita);
return Number(valorEsquerdo) >= Number(valorDireito);
case tipos_de_simbolos_1.default.MENOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) < Number(direita);
return Number(valorEsquerdo) < Number(valorDireito);
case tipos_de_simbolos_1.default.MENOR_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) <= Number(direita);
return Number(valorEsquerdo) <= Number(valorDireito);
case tipos_de_simbolos_1.default.SUBTRACAO:
case tipos_de_simbolos_1.default.MENOS_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) - Number(direita);
return Number(valorEsquerdo) - Number(valorDireito);
case tipos_de_simbolos_1.default.ADICAO:
case tipos_de_simbolos_1.default.MAIS_IGUAL:
if (typeof esquerda === 'number' &&
typeof direita === 'number') {
return Number(esquerda) + Number(direita);
if (tipoEsquerdo === 'número' &&
tipoDireito === 'número') {
return Number(valorEsquerdo) + Number(valorDireito);
}
else {
return String(esquerda) + String(direita);
return String(valorEsquerdo) + String(valorDireito);
}

@@ -149,35 +171,41 @@ case tipos_de_simbolos_1.default.DIVISAO:

this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) / Number(direita);
return Number(valorEsquerdo) / Number(valorDireito);
case tipos_de_simbolos_1.default.MULTIPLICACAO:
case tipos_de_simbolos_1.default.MULTIPLICACAO_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) * Number(direita);
return Number(valorEsquerdo) * Number(valorDireito);
case tipos_de_simbolos_1.default.MODULO:
case tipos_de_simbolos_1.default.MODULO_IGUAL:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) % Number(direita);
return Number(valorEsquerdo) % Number(valorDireito);
case tipos_de_simbolos_1.default.BIT_AND:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) & Number(direita);
return Number(valorEsquerdo) & Number(valorDireito);
case tipos_de_simbolos_1.default.BIT_XOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) ^ Number(direita);
return Number(valorEsquerdo) ^ Number(valorDireito);
case tipos_de_simbolos_1.default.BIT_OR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) | Number(direita);
return Number(valorEsquerdo) | Number(valorDireito);
case tipos_de_simbolos_1.default.MENOR_MENOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) << Number(direita);
return Number(valorEsquerdo) << Number(valorDireito);
case tipos_de_simbolos_1.default.MAIOR_MAIOR:
this.verificarOperandosNumeros(expressao.operador, esquerda, direita);
return Number(esquerda) >> Number(direita);
return Number(valorEsquerdo) >> Number(valorDireito);
case tipos_de_simbolos_1.default.DIFERENTE:
return !this.eIgual(esquerda, direita);
return !this.eIgual(valorEsquerdo, valorDireito);
case tipos_de_simbolos_1.default.IGUAL_IGUAL:
return this.eIgual(esquerda, direita);
return this.eIgual(valorEsquerdo, valorDireito);
}
return null;
};
/**
* Executa uma chamada de função, método ou classe.
* @param expressao A expressão chamada.
* @returns O resultado da chamada.
*/
Interpretador.prototype.visitarExpressaoDeChamada = function (expressao) {
var entidadeChamada = this.avaliar(expressao.entidadeChamada);
var variavelEntidadeChamada = this.avaliar(expressao.entidadeChamada);
var entidadeChamada = variavelEntidadeChamada.valor ? variavelEntidadeChamada.valor : variavelEntidadeChamada;
var argumentos = [];

@@ -195,4 +223,4 @@ for (var i = 0; i < expressao.argumentos.length; i++) {

else if (entidadeChamada instanceof estruturas_1.DeleguaClasse) {
parametros = entidadeChamada.metodos.init
? entidadeChamada.metodos.init.declaracao.parametros
parametros = entidadeChamada.metodos.inicializacao
? entidadeChamada.metodos.inicializacao.declaracao.parametros
: [];

@@ -269,2 +297,8 @@ }

};
/**
* Executa uma expressão Se, que tem uma condição, pode ter um bloco
* Senão, e múltiplos blocos Senão-se.
* @param declaracao A declaração Se.
* @returns O resultado da avaliação do bloco cuja condição é verdadeira.
*/
Interpretador.prototype.visitarExpressaoSe = function (declaracao) {

@@ -277,8 +311,7 @@ if (this.eVerdadeiro(this.avaliar(declaracao.condicao))) {

if (this.eVerdadeiro(this.avaliar(atual.condicao))) {
this.executar(atual.caminho);
return null;
return this.executar(atual.caminho);
}
}
if (declaracao.caminhoSenao !== null) {
this.executar(declaracao.caminhoSenao);
return this.executar(declaracao.caminhoSenao);
}

@@ -412,2 +445,8 @@ return null;

};
/**
* Execução de uma escrita na saída configurada, que pode ser `console` (padrão) ou
* alguma função para escrever numa página Web.
* @param declaracao A declaração.
* @returns Sempre nulo, por convenção de visita.
*/
Interpretador.prototype.visitarExpressaoEscreva = function (declaracao) {

@@ -418,7 +457,9 @@ try {

var argumento = _a[_i];
valor += "".concat(this.avaliar(argumento), " ");
var resultadoAvaliacao = this.avaliar(argumento) || '';
valor += "".concat(resultadoAvaliacao.valor ? resultadoAvaliacao.valor : resultadoAvaliacao, " ");
}
valor = valor.trim();
var formatoTexto = this.paraTexto(valor);
this.resultadoInterpretador.push(formatoTexto);
// Por enquanto `escreva` não devolve resultado no interpretador.
// this.resultadoInterpretador.push(formatoTexto);
this.funcaoDeRetorno(formatoTexto);

@@ -499,3 +540,4 @@ return null;

Interpretador.prototype.visitarExpressaoAcessoIndiceVariavel = function (expressao) {
var objeto = this.avaliar(expressao.entidadeChamada);
var variavelObjeto = this.avaliar(expressao.entidadeChamada);
var objeto = variavelObjeto.valor ? variavelObjeto.valor : variavelObjeto;
var indice = this.avaliar(expressao.indice);

@@ -560,6 +602,12 @@ if (Array.isArray(objeto)) {

};
/**
* Executa uma declaração de classe.
* @param declaracao A declaração de classe.
* @returns Sempre retorna nulo, por ser requerido pelo contrato de visita.
*/
Interpretador.prototype.visitarExpressaoClasse = function (declaracao) {
var superClasse = null;
if (declaracao.superClasse !== null) {
superClasse = this.avaliar(declaracao.superClasse);
var variavelSuperClasse = this.avaliar(declaracao.superClasse);
superClasse = variavelSuperClasse.valor;
if (!(superClasse instanceof estruturas_1.DeleguaClasse)) {

@@ -581,3 +629,3 @@ throw new excecoes_1.ErroEmTempoDeExecucao(declaracao.superClasse.nome, 'SuperClasse precisa ser uma classe.', declaracao.linha);

}
var criado = new estruturas_1.DeleguaClasse(declaracao.simbolo.lexema, superClasse, metodos);
var deleguaClasse = new estruturas_1.DeleguaClasse(declaracao.simbolo.lexema, superClasse, metodos);
// TODO: Recolocar isso se for necessário.

@@ -587,7 +635,13 @@ /* if (superClasse !== null) {

} */
this.pilhaEscoposExecucao.atribuirVariavel(declaracao.simbolo, criado);
this.pilhaEscoposExecucao.atribuirVariavel(declaracao.simbolo, deleguaClasse);
return null;
};
/**
* Executa um acesso a método, normalmente de um objeto de classe.
* @param expressao A expressão de acesso.
* @returns O resultado da execução.
*/
Interpretador.prototype.visitarExpressaoAcessoMetodo = function (expressao) {
var objeto = this.avaliar(expressao.objeto);
var variavelObjeto = this.avaliar(expressao.objeto);
var objeto = variavelObjeto === null || variavelObjeto === void 0 ? void 0 : variavelObjeto.valor;
if (objeto instanceof estruturas_1.ObjetoDeleguaClasse) {

@@ -625,7 +679,7 @@ return objeto.get(expressao.simbolo) || null;

var objeto = this.pilhaEscoposExecucao.obterVariavelPorNome('isto');
var metodo = superClasse.encontrarMetodo(expressao.metodo.lexema);
var metodo = superClasse.valor.encontrarMetodo(expressao.metodo.lexema);
if (metodo === undefined) {
throw new excecoes_1.ErroEmTempoDeExecucao(expressao.metodo, 'Método chamado indefinido.', expressao.linha);
}
return metodo.definirInstancia(objeto);
return metodo.definirInstancia(objeto.valor);
};

@@ -632,0 +686,0 @@ Interpretador.prototype.paraTexto = function (objeto) {

@@ -1,2 +0,2 @@

import { SimboloInterface } from '../interfaces';
import { SimboloInterface, VariavelInterface } from '../interfaces';
import { EscopoExecucao } from '../interfaces/escopo-execucao';

@@ -16,9 +16,9 @@ import { PilhaEscoposExecucaoInterface } from '../interfaces/pilha-escopos-execucao-interface';

atribuirVariavel(simbolo: SimboloInterface, valor: any): void;
obterVariavelEm(distancia: number, nome: string): any;
obterVariavel(simbolo: SimboloInterface): any;
obterVariavelPorNome(nome: string): any;
obterVariavelEm(distancia: number, nome: string): VariavelInterface;
obterVariavel(simbolo: SimboloInterface): VariavelInterface;
obterVariavelPorNome(nome: string): VariavelInterface;
/**
* Método usado pelo depurador para obter todas as variáveis definidas.
*/
obterTodasVariaveis(todasVariaveis?: any[]): any[];
obterTodasVariaveis(todasVariaveis?: VariavelInterface[]): VariavelInterface[];
/**

@@ -25,0 +25,0 @@ * Obtém todas as funções declaradas ou por código-fonte, ou pelo desenvolvedor

@@ -7,2 +7,3 @@ "use strict";

var lexador_1 = require("../lexador");
var inferenciador_1 = require("./inferenciador");
var PilhaEscoposExecucao = /** @class */ (function () {

@@ -35,7 +36,7 @@ function PilhaEscoposExecucao() {

PilhaEscoposExecucao.prototype.definirVariavel = function (nomeVariavel, valor) {
this.pilha[this.pilha.length - 1].ambiente.valores[nomeVariavel] = valor;
this.pilha[this.pilha.length - 1].ambiente.valores[nomeVariavel] = { valor: valor, tipo: (0, inferenciador_1.inferirTipoVariavel)(valor) };
};
PilhaEscoposExecucao.prototype.atribuirVariavelEm = function (distancia, simbolo, valor) {
var ambienteAncestral = this.pilha[this.pilha.length - distancia].ambiente;
ambienteAncestral.valores[simbolo.lexema] = valor;
ambienteAncestral.valores[simbolo.lexema] = { valor: valor, tipo: (0, inferenciador_1.inferirTipoVariavel)(valor) };
};

@@ -46,3 +47,3 @@ PilhaEscoposExecucao.prototype.atribuirVariavel = function (simbolo, valor) {

if (ambiente.valores[simbolo.lexema] !== undefined) {
ambiente.valores[simbolo.lexema] = valor;
ambiente.valores[simbolo.lexema] = { valor: valor, tipo: (0, inferenciador_1.inferirTipoVariavel)(valor) };
return;

@@ -82,3 +83,5 @@ }

var ambiente = this.pilha[this.pilha.length - i].ambiente;
todasVariaveis.push(ambiente.valores);
// TODO: Testar se isso faz sentido.
var vetorObjeto = Object.entries(ambiente).map(function (chave, valor) { return ({ valor: valor, tipo: 'texto' }); });
todasVariaveis.concat(vetorObjeto);
}

@@ -85,0 +88,0 @@ return todasVariaveis;

@@ -246,2 +246,3 @@ "use strict";

case ' ':
case '\0':
case '\r':

@@ -248,0 +249,0 @@ case '\t':

{
"name": "@designliquido/delegua",
"version": "0.6.0",
"version": "0.6.1",
"description": "Linguagem de programação simples e moderna usando português",

@@ -39,2 +39,6 @@ "main": "index.ts",

"url": "https://www.linkedin.com/in/samuel-renan-gon%C3%A7alves-vaz-b6b83a103/"
},
{
"name": "Alessandro Fuhr de Mello",
"url": "https://github.com/AlessandroFMello"
}

@@ -56,3 +60,6 @@ ],

"ts-node": "^10.7.0",
"typescript": "^4.6.3"
"typescript": "^4.6.3",
"@designliquido/delegua-estatistica": "^0.0.5",
"@designliquido/delegua-fisica": "^0.0.2",
"@designliquido/delegua-matematica": "^0.0.2"
},

@@ -59,0 +66,0 @@ "dependencies": {

@@ -43,3 +43,3 @@ <br>

```
npm install -g @designliquido/delegua
npm install -g delegua
```

@@ -63,2 +63,8 @@

Se não quiser instalar as bibliotecas que acompanham Delégua, apenas o núcleo da linguagem pode ser instalado:
```
npm install -g @designliquido/delegua
```
## Documentação

@@ -65,0 +71,0 @@

@@ -56,2 +56,12 @@ "use strict";

});
it('Falha - Funçao de mapeamento inválida', function () {
var codigo = [
"var f = 'Sou uma função'",
"escreva(mapear([1, 2, 3], f))"
];
var retornoLexador = delegua.lexador.mapear(codigo, -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
expect(retornoInterpretador.erros.length).toBeGreaterThan(0);
});
});

@@ -58,0 +68,0 @@ describe('ordenar()', function () {

@@ -146,3 +146,3 @@ "use strict";

describe('Declaração e chamada de funções', function () {
it.skip('Fibonacci', function () {
it('Fibonacci', function () {
var codigo = [

@@ -149,0 +149,0 @@ "função fibonacci(n) {",

@@ -78,2 +78,66 @@ "use strict";

});
describe('Importar bibliotecas delegua', function () {
describe('testa importação da biblioteca de estatística', function () {
beforeEach(function () {
jest.mock('./__mocks__/estatistica.ts');
});
afterAll(function () {
jest.unmock("./__mocks__/estatistica.ts");
});
it('estatística', function () {
var retornoLexador = delegua.lexador.mapear(["var estatística = importar('estatística')"], -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
console.log(retornoInterpretador);
expect(retornoInterpretador.erros).toHaveLength(0);
});
it('estatistica', function () {
var retornoLexador = delegua.lexador.mapear(["var estatistica = importar('estatistica')"], -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
console.log(retornoInterpretador);
expect(retornoInterpretador.erros).toHaveLength(0);
});
});
describe('testa importação da biblioteca de física', function () {
beforeEach(function () {
jest.mock('./__mocks__/fisica.ts');
});
afterEach(function () {
jest.unmock("./__mocks__/fisica.ts");
});
it('física', function () {
var retornoLexador = delegua.lexador.mapear(["var física = importar('física')"], -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
expect(retornoInterpretador.erros).toHaveLength(0);
});
it('fisica', function () {
var retornoLexador = delegua.lexador.mapear(["var fisica = importar('fisica')"], -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
expect(retornoInterpretador.erros).toHaveLength(0);
});
});
describe('testa importação da biblioteca de matemática', function () {
beforeEach(function () {
jest.mock('./__mocks__/matematica.ts');
});
afterAll(function () {
jest.unmock("./__mocks__/matematica.ts");
});
it('matemática', function () {
var retornoLexador = delegua.lexador.mapear(["var matemática = importar('matemática')"], -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
expect(retornoInterpretador.erros).toHaveLength(0);
});
it('matematica', function () {
var retornoLexador = delegua.lexador.mapear(["var matematica = importar('matematica')"], -1);
var retornoAvaliadorSintatico = delegua.avaliadorSintatico.analisar(retornoLexador);
var retornoInterpretador = delegua.interpretador.interpretar(retornoAvaliadorSintatico.declaracoes);
expect(retornoInterpretador.erros).toHaveLength(0);
});
});
});
});

@@ -80,0 +144,0 @@ describe('Operações matemáticas', function () {

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc