Linguagem experimental

caminhante 311738cc16 Markdown de alguns blocos estava incorreto 4 anos atrás
ERPL.leo 311738cc16 Markdown de alguns blocos estava incorreto 4 anos atrás
LICENSE 29c2db553e Só por causa do Github... é irônico chamar um arquivo que coloca seu trabalho no domínio público como "licensa". 7 anos atrás
Makefile da9b2e413b Makefile auto-explicativo 5 anos atrás
README.md 311738cc16 Markdown de alguns blocos estava incorreto 4 anos atrás
erpl.c 7f2e00290c Agora os argumentos das funções estão com os asteriscos do lado certo (sim, frescura) 6 anos atrás
erpl.h db90706c71 Iniciei a revisão das funções fundamentais da linguagem 6 anos atrás
erplb.c f58019f79d Pequena correção 6 anos atrás
erple.c 7f2e00290c Agora os argumentos das funções estão com os asteriscos do lado certo (sim, frescura) 6 anos atrás
erpli.c 8ee6060d18 Comecei as modificações necessárias pra incluir objetos-tabela como parte dos átomos 6 anos atrás
erplm.c 7f2e00290c Agora os argumentos das funções estão com os asteriscos do lado certo (sim, frescura) 6 anos atrás
erplp.c b64ef91588 Terminadas as correções de mensagens de erro 6 anos atrás
erplt.c 7f2e00290c Agora os argumentos das funções estão com os asteriscos do lado certo (sim, frescura) 6 anos atrás
test.c 8ee6060d18 Comecei as modificações necessárias pra incluir objetos-tabela como parte dos átomos 6 anos atrás

README.md

ERPL

Sobre o projeto

Licença

Eu declaro que este projeto está liberado ao domínio público. Caso isto não seja legalmente possível, eu dou desde já autorização para qualquer pessoa de ler, usar, modificar e renomear qualquer arquivo deste repositório livremente. Se necessário for, eu posso liberar meu código-fonte sob uma licença de software livre qualquer ou emitir uma licença comercial sem qualquer custo exceto os custos de envio.

Versionamento

Este projeto será versionado sob o regime monotônico. Para referência consulte o Manifesto Monotônico.

Compilando

Basta possuir um compilador compatível com C99 e extensões GNU (GCC é altamente indicado) e GnuMake ou similar, daí rodar make.

O executável do interpretador se chama erpl.

O código-fonte atualmente não possui dependências além da biblioteca C padrão.

Usando

(Em andamento)

Programas de exemplo

(Em andamento)

Distribuindo um programa

(Em andamento)

Opções e configurações do interpretador

Sobre a linguagem

ERPL é um pequeno dialeto Lisp experimental, para estudo de design de linguagens.

Sintaxe básica

ERPL é uma linguagem concatenativa e recebe seus tokens por padrão em notação polonesa reversa.

Isso quer dizer que todo tipo de dado em ERPL funciona como uma função alterando o estado de uma pilha operacional implícita. Existe uma pilha na qual os dados à serem manipulados são dispostos pelo interpretador, e funções podem ser aplicadas aos dados na pilha, retornando valores na própria pilha. A ordem de acesso da pilha é: o último que entra é o primeiro que sai (em inglês, Last In, First Out ou LIFO).

Além disso, os objetos ou funções podem ser concatenadas para construir novas funções, por isso é uma linguagem concatenativa e possui propriedades únicas. Existem outros detalhes importantes de ERPL que serão descritos nos capítulos seguintes.

Visualmente, os tokens são normalmente interpretados da esquerda para direita. O seguinte bloco demonstra código ERPL válido:

"Hello " "world" append STDOUT puts

Neste código, primeiramente dois objetos do tipo String são dispostos na pilha. Uma representação imaginária da pilha se segue, com os itens presentes nela numerados à partir de 1, representando o topo da pilha:

2: "Hello "
1: "world"

Logo após, a função nativa append é convocada, atuando sobre os dois objetos de tipo String e deixando seu retorno na pilha, o texto dos dois concatenado em um objeto só:

1: "Hello world"

Em seguida, a constante especial STDOUT é convocada, deixando um valor na pilha que será aproveitado em seguida pela função nativa puts:

2: "Hello world"
1: 1

A função puts recebe dois operandos, um objeto String e um inteiro representando um descritor de arquivo, daí envia o texto do objeto String para o descritor. No exemplo, o descritor de arquivo aponta para a saída de texto padrão do programa. Você deverá ver Hello world aparecer no seu terminal ou console de texto.

É útil notar que o caractere ; demarca o início de uma linha de comentário em ERPL. Todo texto que aparecer entre o ; e o final da linha é ignorado pelo interpretador.

Definições

Tipos de dados e objetos

Os tipos de dados disponíveis em ERPL podem ser escalares ou vetoriais. Os escalares contém um único valor numérico e são representados pelo tipo Atom. Os vetoriais representam uma sequência de zero ou mais dados que podem ser de qualquer tipo, e são representados pelo tipo Sequence.

Os tipos implementados na linguagem são 8 ao todo, formando uma pequena hierarquia:

  • Atom
    • Integer
    • Double
    • Char
  • Sequence
    • String
    • Dependent
    • Application

Os tipos Atom e Sequence são os mais genéricos e os demais tem propriedades especiais convenientes.

Atom

É o tipo escalar mais genérico, os demais tipos escalares são refinamentos deste. Todos os outros tipos podem ser convertidos para Atom, mas nem todos os valores de Atom podem ser convertidos para tipos refinados, devido às restrições de cada tipo.

Não existe token para criar um objeto Atom diretamente, apenas seus tipos derivados.

Integer

É um tipo que apenas aceita valores numéricos inteiros.