GithubHelp home page GithubHelp logo

designliquido / delegua Goto Github PK

View Code? Open in Web Editor NEW
226.0 6.0 22.0 5.19 MB

Linguagem de programação 100% em português baseada em TypeScript, independente de sistema operacional e dispositivo, e suporte a múltiplos dialetos.

License: MIT License

JavaScript 0.01% Batchfile 0.01% TypeScript 96.94% ANTLR 3.06%
portugues portuguese programacao typescript hacktoberfest

delegua's Introduction


delegua

Linguagem Delégua

Linguagem de programação 100% em português com suporte a múltiplos dialetos, como Portugol VisuAlg, Portugol Studio, Mapler e BIRL.

Página Web com Interpretador Delégua para demonstrações

Acompanhe a Design Líquido nas redes sociais:

Introdução

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, usada para fins educacionais e comerciais pela Design Líquido. A variação começou na versão 1.2.0 de Égua.

Delégua tem retrocompatibilidade com a linguagem Égua e compreende sua extensão de arquivo (.egua). Em outras palavras, todo programa escrito em Égua funciona em Delégua, mas Delégua tem capacidades a mais, conforme mencionado em documentação.

Vantagens de programar em português

  • Acessibilidade e Compreensão: Programar em sua língua materna, como o português, pode tornar os conceitos de programação mais acessíveis e fáceis de entender, especialmente para iniciantes. Isso reduz a barreira de entrada para novos programadores.

  • Facilita o Aprendizado: A programação em português permite que os aprendizes concentrem-se nos conceitos de programação em vez de lidar com a barreira do idioma. Isso pode acelerar o processo de aprendizado, especialmente para pessoas que não têm fluência em inglês.

  • Melhor Comunicação e Documentação: Programar em seu idioma nativo pode levar a uma comunicação mais clara e eficaz com colegas e clientes locais. Além disso, a documentação em português pode ser mais fácil de compreender e seguir.

  • Contribuição para a Identidade Cultural: Linguagens de programação em português contribuem para a preservação da identidade cultural e linguística, promovendo o uso e a adoção do idioma em contextos tecnológicos.

  • Facilita a Localização de Erros: Programar em português pode tornar mais fácil a localização e correção de erros de código, uma vez que os desenvolvedores podem compreender rapidamente o contexto dos problemas.

Características

Delégua, a linguagem de programação totalmente em português, possui uma série de características que a tornam única e atraente:

Acessibilidade

  • Simples e Completa: Delégua é projetada para ser acessível a programadores de todos os níveis, desde iniciantes até experientes. Sua simplicidade e completude facilitam a aprendizagem.

  • Totalmente em Português: Uma característica distintiva é que Delégua é desenvolvida inteiramente em português(mesmo), tornando-a acessível e amigável para aqueles que preferem programar em seu idioma nativo.

Tecnologia Moderna

  • Código aberto (open source): Delégua é uma linguagem de código aberto e gratuita, licenciada sob a MIT License, permitindo o uso sem restrições.

  • Modularidade: A linguagem suporta a criação de módulos reutilizáveis, promovendo a organização e a manutenção do código.

  • Orientada a Objetos: Delégua oferece recursos completos de programação orientada a objetos, incluindo classes, objetos e herança.

  • Multidialetos. Execute algoritmos em Portugol VisuAlg, Portugol Studio, Portugol Mapler e Portugol IPT.

Flexibilidade e Potencial

  • Depurável. Usando um editor com suporte à depuração como o Visual Studio Code, você pode inspecionar o seu programa, suas variáveis e executar linha por linha.

  • Portabilidade: Delégua é executável em qualquer dispositivo que interprete JavaScript, tornando-a versátil e compatível com diversos sistemas operacionais e qualquer navegador de internet.

  • Traduzibilidade: A capacidade de traduzir programas entre Delégua, Python e JavaScript aumenta a flexibilidade e as opções de desenvolvimento.

Aplicações

Instalação

Delégua executa em qualquer dispositivo que interprete JavaScript, ou seja, computadores, celulares e tablets. Você não precisa instalar nada se não quiser. Utilize uma das seguintes opções:

Para instalar no seu computador, veja o projeto @designliquido/delegua-node.

Documentação

Contribuições e Comunidade

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  avatar  avatar

delegua's Issues

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!

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'.

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

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')

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]

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.

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...

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
*/

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.

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

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.

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.

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"}

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.

Melhorar testes

Criar e melhorar testes existestes para:

  • égua
  • eguac
  • eguap
  • delégua

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

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.