Giter Club home page Giter Club logo

delegua's People

Contributors

alassana-djigo avatar alessandrofmello avatar antonio-pedro99 avatar aristidescosta avatar cassfer avatar cx-leonelsanches avatar felixdomingos1 avatar hernique33comiitei avatar italocobains avatar leonelsanchesdasilva avatar pablotdv avatar samuelrvg avatar seg-leonelsanches avatar vitbrandao avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

delegua's Issues

Melhorar testes

Criar e melhorar testes existestes para:

  • égua
  • eguac
  • eguap
  • delégua

Importar biblioteca externa esta com erro

Instalei o lodash global na máquina, e fiz o seguinte teste:

inicio.delegua

var lodash = importar('lodash');
var a = { 'b': 'c' };
escreva(lodash.get(a, 'b', 'f'));

delegua inicio.delegua

TypeError: Cannot read properties of null (reading 'constructor')

Erro em JavaScript: Cannot convert undefined or null to object
Pilha de execução: TypeError: Cannot convert undefined or null to object

Mau funcionamento ao tentar clonar variáveis

Ao tentar clonar uma variável a partir de outra, essa nova variável está recebendo o objeto inteiro ("valor" e "tipo") ao invés de receber somente o valor.

Exemplo:

var a = 123;
var copia = a;
escreva(copia); // {"valor":{"valor":123,"tipo":"número"},"tipo":"dicionário"}

Estou ciente de que clonar dessa forma pode ser um pouco incomum, mas nunca podemos duvidar do comportamento do usuário.

Podemos notar também que outra consequência dessa Issue é que as variáveis clonadas sempre receberão o tipo 'dicionário' por receberem o objeto inteiro.

Em tempo, ressalto que quando clonamos uma variável com implementações extras (o que é mais comum), o funcionamento ocorre de acordo:

var a = 'Vitor Brandao';
var aMaiusculo = a.maiusculo();
escreva(aMaiusculo); // "VITOR BRANDAO"

Mas mesmo ao tentar clonar a variável bem sucedida, persiste a atribuição do objeto inteiro:

var a = 'Vitor Brandao';
var aMaiusculo = a.maiusculo();
var copia = aMaiusculo;
escreva(copia); // {"valor":{"valor":"VITOR BRANDAO","tipo":"texto"},"tipo":"dicionário"}

Métodos do exemplo que não deveriam ter retorno retornam valor assim mesmo

classe Resposta {
    enviar(codigo) {
        isto.codigo = codigo
    }

    status(statusHttp) {
        isto.statusHttp = statusHttp
    }
}

var resp = Resposta();
escreva(resp.enviar("Ok").status(200))

Neste caso:

enviar(codigo) {
        isto.codigo = codigo
    }

"Ok" é retornado pelo Interpretador, e

    status(statusHttp) {
        isto.statusHttp = statusHttp
    }

200 é retornado pelo Interpretador.

Permitir operações direto no console

Essa funcionalidade é para o dialeto Delégua.

Hoje, só é possível realizar operações matemáticas se fizer a atribuição a uma variável.

A idéia aqui é permitir essas operações no console sem precisar dessa atribuição e assim mostrar o resultado.

9-2
9*2
9/2
9**2

Também para operadores lógicos.

2 != 2; // falso
1==1; // verdadeiro
5+5; // 10

Parênteses em `retorna` devem ser opcionais

inicio.delegua

var funcoesMatematicas = importar('./funcoes.delegua')

var soma = funcoesMatematicas.soma(1, 2)
escreva(soma)

funcoes.delegua

função soma(valor1, valor2){
    retorna valor1 + valor2;
}
delegua inicio.delegua

Erro: [Linha: 3] Chamada de função ou método inexistente: [object Object]

Não esta retornando erros no retorno de Delégua

Testando:

    classe Animal {
      correr() {
        escreva("Correndo Loucamente");
      }
    }
    classe Cachorro herda Animal {
      latir() {
        escreva("Au Au Au Au"); aqui é pra gerar um erro
      }
    }
    
    var nomeDoCachorro = Cachorro();
    nomeDoCachorro.correr();
    nomeDoCachorro.latir();

Deveria retornar erro, mas não retorna e funciona normal.

Retorno de método `nulo` esta retornando `null`

testes.delegua

função testeRetornoNulo(){
    retorna nulo
}

inicio.delegua

var teste = importar('./testes.delegua')

var resultado = teste.testeRetornoNulo()
escreva(resultado)

delegua inicio.delegua

Retorno esperado

nulo

Retorno obtido

null

Erro ao iniciar RELP (Delégua)

C:\delegua\fontes\interpretador\pilha-escopos-execucao.ts:34
this.pilha.at(-1).ambiente.valores[nomeVariavel] = valor;
^
TypeError: this.pilha.at is not a function
at PilhaEscoposExecucao.definirVariavel (C:\delegua\fontes\interpretador\pilha-escopos-execucao.ts:34:20)
at default_1 (C:\delegua\fontes\bibliotecas\biblioteca-global.ts:12:26)
at new Interpretador (C:\delegua\fontes\interpretador\interpretador.ts:89:33)
at new Delegua (C:\delegua\fontes\delegua.ts:85:38)
at principal (C:\delegua\index.ts:21:21)
at Object. (C:\delegua\index.ts:30:1)
at Module._compile (internal/modules/cjs/loader.js:1085:14)
at Module._compile (C:\delegua\node_modules\ts-node\src\index.ts:1455:23)
at internal/modules/cjs/loader.js:1114:10
at Object..ts (C:\delegua\node_modules\ts-node\src\index.ts:1458:12)
Waiting for the debugger to disconnect...

Zero não é considerado um número inteiro pelo método inteiro() quando passado na forma de número

Números como paràmetro do método inteiro()

var valor = inteiro(1)

se (valor > 0) {
  escreva('Este número é positivo!');
} senao se (valor < 0) {
  escreva('Este número é negativo!');
  } senao {
  escreva('Zero não é positivo nem negativo');
}

retorno:
Este número é positivo!

var valor = inteiro(-1)

se (valor > 0) {
  escreva('Este número é positivo!');
} senao se (valor < 0) {
  escreva('Este número é negativo!');
  } senao {
  escreva('Zero não é positivo nem negativo!');
}

retorno:
Este número é negativo!

var valor = inteiro(0)

se (valor > 0) {
  escreva('Este número é positivo!');
} senao se (valor < 0) {
  escreva('Este número é negativo!');
  } senao {
  escreva('Zero não é positivo nem negativo');
}

retorno:
Erro em JavaScript: Somente números podem passar para inteiro.
Pilha de execução: Error: Somente números podem passar para inteiro.

Strings como paràmetro do método inteiro()

var valor = inteiro("1")

se (valor > 0) {
  escreva('Este número é positivo!');
} senao se (valor < 0) {
  escreva('Este número é negativo!');
  } senao {
  escreva('Zero não é positivo nem negativo');
}

retorno:
Este número é positivo!

var valor = inteiro("-1")

se (valor > 0) {
  escreva('Este número é positivo!');
} senao se (valor < 0) {
  escreva('Este número é negativo!');
  } senao {
  escreva('Zero não é positivo nem negativo!');
}

retorno:
Este número é negativo!

var valor = inteiro("0")

se (valor > 0) {
  escreva('Este número é positivo!');
} senao se (valor < 0) {
  escreva('Este número é negativo!');
  } senao {
  escreva('Zero não é positivo nem negativo');
}

retorno:
Zero não é positivo nem negativo!

Método 'escreva' retorna um 'undefined' a mais.

Se escrevermos somente o nome da variável no terminal e dermos um enter, o código retorna um objeto com as chaves "valor" e "tipo". Exemplo:

var texto = "Olá, tudo bem?"; // undefined
texto // {"valor":"Olá, tudo bem?","tipo":"texto"}

Até aqui, tudo bem, pois quando digitamos o nome da variável, o objeto contendo valor e tipo são retornados na íntegra.

Porém, se seguirmos o mesmo processo, mas utilizamos o método escreva(variável) para ler, o código retorna o valor, mas seguido de um undefined na linha abaixo:

var texto = "Olá, tudo bem?";
escreva(texto); 
// Olá, tudo bem? 
// undefined

OBSERVAÇÕES FINAIS:

  • Pode ser que o método esteja tentando também retornar o "tipo" - a segunda chave do objeto montado ao criar a variável;
  • É importante notar também que no primeiro exemplo, após criar a variável, um undefined também está sendo retornado por padrão. Trago esse ponto apenas para a possibilidade de ser o mesmo erro ou uma questão similar.

Mostrando resultado somente uma vez no console

Começou a partir da versão 0.1.3

Cenário:

escreva('abc' + 123); // abc123

Se repetir o mesmo processo, não vai mostrar nada no console, mesmo se tentar escrever qualquer outra coisa.

O resultado é sempre o mesmo, funcionando apenas uma única vez.

Erro de hasOwnProperty ao verificar nulo

escreva(nulo == nulo)

ou

nulo == nulo

Erro em JavaScript: Cannot read properties of null (reading 'hasOwnProperty')
Pilha de execução: TypeError: Cannot read properties of null (reading 'hasOwnProperty')

Permitir comentários em múltiplas linhas

Hoje, só é possível fazer comentários com // a idéia é também permitir o uso de /* */ para várias linhas.

Usar algo como:

/*
Comentário
Comentário
Comentário
Comentário
*/

Variável não definida

A partir da versão 0.3.0 de Delégua, ao definir variável, esta gerando problema de variável não definida.

Cenário:

var a = 1
a
escreva(a)
Erro: [Linha: 1] Variável não definida 'a'.

Problema no lexador.mapear()

Dado o seguinte array de string:

['5*4', 'escreva(2 + 2)']

Saída:
4
Esperado:
20
4

Esse problema ocorre no seguinte método analisarNumero() do arquivo lexador.ts:

        const numeroCompleto = this.codigo[this.linha].substring(
            this.inicioSimbolo,
            this.atual
        );
        this.adicionarSimbolo(
            tiposDeSimbolos.NUMERO,
            parseFloat(numeroCompleto)
        );

A variável numeroCompleto era pra retornar 4, mas esta retornando vazio, e quando tenta fazer o parseFloat gera NaN;

Testando, verifiquei que this.atual esta com valor errado.

Erros ao usar o console Delégua

PS C:\delegua> escreva(856+4)

Erro:

escreva : The term 'escreva' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included,
verify that the path is correct and try again.
At line:1 char:1

  • escreva(856+4)
  • CategoryInfo : ObjectNotFound: (escreva:String) [], CommandNotFoundException
  • FullyQualifiedErrorId : CommandNotFoundException

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.