Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 12 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,36 @@

![example workflow](https://github.com/arrudagates/PTBRi/actions/workflows/rust.yml/badge.svg)

## What is PTBR?
## O que é PTBR?

PTBR is a language being developed for easy understanding with it's main goal to be a simple way to introduce Portuguese speakers without any technical background to programming
PTBR é uma linguagem que está sendo desenvolvida para facilitar o entendimento com o objetivo principal de ser uma forma simples de apresentar falantes de português sem nenhum conhecimento técnico em programação

Here's an example:
Um exemplo:

```
a é 5
b é 2
mostre a vezes b
```

## Where are we in the development?
## Onde estamos no desenvolvimento?

PTBRi started as an interpreter forked from rust-lci, a LOLCODE interpreter, following that logic, the language itself started as LOLCODE. That old codebase can be found at [old-PTBRi](https://github.com/arrudagates/old-PTBRi)
O PTBRi começou como um fork do interpretador do rust-lci, um interpretador LOLCODE, seguindo essa lógica, a própria linguagem começou como LOLCODE. Essa base de código antiga pode ser encontrada em [old-PTBRi](https://github.com/arrudagates/old-PTBRi)

This is a rewrite from scratch with a complete rewrite of everything from the language specification to the parser and interpreter.
Esta é uma reescrita do zero com uma reescrita completa de tudo, desde a especificação da linguagem até o analisador e o interpretador.

The current code is far from production ready, there's so much to be done, the language is far from being 100% implemented and both the parser and interpreter are prototype level code.
O código atual está longe de estar pronto para produção, há muito a ser feito, a linguagem está longe de ser 100% implementada e tanto o analisador quanto o interpretador são códigos em nível de protótipo.

## How to use
## Como usar

Currently we have a basic prototype, it can be tested by running the code with a ptbr file as argument:
Atualmente temos um protótipo básico, ele pode ser testado executando o código com um arquivo ptbr como argumento:

```
cargo run tests/basic.ptbr
// or compiled
// ou compilado
ptbri tests/basic.ptbr
```

## What's already implemented?

You can check the already implemented syntax [here](ptbr_definitions.md)
## O que já está implementado?

Você pode verificar a sintaxe já implementada [aqui](ptbr_definitions.md)
103 changes: 51 additions & 52 deletions ptbr_definitions.md
Original file line number Diff line number Diff line change
@@ -1,68 +1,68 @@
# Syntax definitions for PTBR
# Definições de sintaxe para PTBR

PTBR is an exotic language because it lacks common symbols used in most languages, like parenthesis, and also makes use of characters usually ignored, like `é`
PTBR é uma linguagem exótica porque carece de símbolos comuns usados na maioria das linguagens, como parênteses, e também faz uso de caracteres normalmente ignorados, como `é`

## Variable definition
## Definição de variável

Variable definitions are written as Identifier followed by the keyword `é` followed by the value/expression/user input to be assigned
As definições de variáveis são escritas como Identificador seguido pela palavra-chave `é` seguida pelo valor/expressão/entrada do usuário a ser atribuída

Example:
Exemplo:
```
a é 1
```

## Output
## Saída

Output to the screen is written as the keyword `mostre` followed by the value/expression to be displayed
A saída para a tela é escrita como a palavra-chave `mostre` seguida pelo valor/expressão a ser exibido

Multiple values can be displayed on the same line by appending them in the after the last argument of the `mostre` keyword using the `e` keyword
Vários valores podem ser exibidos na mesma linha anexando-os após o último argumento da palavra-chave `mostre` usando a palavra-chave `e`

Example:
Exemplo:
```
mostre a
mostre a e b
mostre a e b e a mais b
```

## Expressions
## Expressões

Expressions are written as the keyword of the expression surrounded with a value/identifier/expression on both sides
As expressões são escritas como a palavra-chave da expressão cercada por um valor/identificador/expressão em ambos os lados

Valid expression keywords are:
As palavras-chave de expressão válidas são:
- mais
- menos
- vezes
- dividido por

Example:
Exemplo:
```
a mais 1
a menos 1
a vezes 1
a dividido por 1
```

## If Statements
## Declarações If

If statements are written as the keyword `se` followed by a comparison operator (and optionally a modifier) surrounded by a value/identifier/expression on both sides
Se as instruções forem escritas como a palavra-chave `se` seguida por um operador de comparação (e opcionalmente um modificador) cercado por um valor/identificador/expressão em ambos os lados

If statements can also have an else statement after the code block and the end keyword, explained at the section "Else"
As instruções if também podem ter uma instrução else após o bloco de código e a palavra-chave end, explicada na seção "Else"

If statements require code to be run, everything between the if statement and the keyword `até aqui` is considered inner code of the if statement
Se as instruções exigem que o código seja executado, tudo entre a instrução if e a palavra-chave `até aqui` é considerado código interno da instrução if

Valid comparison operators are:
Os operadores de comparação válidos são:
- é
- não é

Valid comparison modifiers are:
Os modificadores de comparação válidos são:
- maior que
- menor que
- maior ou igual a
- menor ou igual a

You can also add logical conditions for the comparisons by placing one on each side of either `e` (and) or `ou` (or)
Você também pode adicionar condições lógicas para as comparações colocando uma em cada lado de `e` (e) ou `ou` (ou)

Example:
Exemplo:
```
se a é 1
se a não é 1
Expand All @@ -77,13 +77,13 @@ se a é 1 e b é 2
se a é 1 ou b é 2
```

## Else
## Senão

Else statements are an optional follow up to an if statement, if that statement evaluates to false, the interpreter will jump to the `senão` keyword immediately after the end keyword, if present
As instruções Else são um acompanhamento opcional de uma instrução if, se essa instrução for avaliada como falsa, o interpretador pulará para a palavra-chave `senão` imediatamente após a palavra-chave end, se presente

Else statements require code to be run, everything between the else statement and the keyword `até aqui` is considered inner code of the else statement
As instruções Else requerem que o código seja executado, tudo entre a instrução else e a palavra-chave `até aqui` é considerado código interno da instrução else

Example:
Exemplo:
```
se a é 1
mostre a
Expand All @@ -96,23 +96,23 @@ até aqui

## While Loops

While loops are written as the keyword `enquanto` followed by a comparison operator (and optionally a modifier) surrounded by a value/identifier/expression on both sides
Enquanto os loops são escritos como a palavra-chave `enquanto` seguida por um operador de comparação (e opcionalmente um modificador) cercado por um valor/identificador/expressão em ambos os lados

While loops require code to be run, everything between the while loop and the keyword `até aqui` is considered inner code of the while loop
Enquanto os loops exigem que o código seja executado, tudo entre o loop while e a palavra-chave `até aqui` é considerado código interno do loop while

Valid comparison operators are:
Os operadores de comparação válidos são:
- for
- não for

Valid comparison modifiers are:
Os modificadores de comparação válidos são:
- maior que
- menor que
- maior ou igual a
- menor ou igual a

You can also add logical conditions for the comparisons by placing one on each side of either `e` (and) or `ou` (or)
Você também pode adicionar condições lógicas para as comparações colocando uma em cada lado de `e` (e) ou `ou` (ou)

Example:
Exemplo:
```
enquanto a for 1
enquanto a não for 1
Expand All @@ -122,14 +122,13 @@ enquanto a não for menor ou igual a 1
enquanto a for 1 e b for 2
enquanto a for 1 ou b for 2
```
## Definição de função

## Function Definition
As definições de função são escritas como a palavra-chave `defina a função` seguida por um identificador e opcionalmente a palavra-chave `usando` e uma cadeia de identificadores a serem usados dentro do escopo da função

Function definitions are written as the keyword `defina a função` followed by an identifier and optionally the keyword `usando` and a chain of identifiers to be used inside the scope of the function
As funções exigem que o código seja executado, tudo entre a definição da função e a palavra-chave `até aqui` é considerado código interno da função

Functions require code to be run, everything between the function definition and the keyword `até aqui` is considered inner code of the function

Example:
Exemplo:
```
defina a função teste
mostre "teste"
Expand All @@ -140,11 +139,11 @@ mostre a mais b
até aqui
```

## Function Calls
## Chamadas de Função

Function calls are written as the keyword `função` followed by it's identifier and optionally the keyword `usando` and a chain of identifiers to be used by the function, if it's declared with identifiers
As chamadas de funções são escritas como a palavra-chave `função` seguida de seu identificador e opcionalmente a palavra-chave `usando` e uma cadeia de identificadores a serem usados pela função, caso ela seja declarada com identificadores

Example:
Exemplo:
```
função teste

Expand All @@ -155,11 +154,11 @@ b é 5
função soma usando a e b
```

## User Input
## Entrada do usuário

Use input is done by assigning the keyword `entrada de` followed by the type of data being entered to a variable
O uso de entrada é feito atribuindo a palavra-chave `entrada de` seguida pelo tipo de dados que está sendo inserido em uma variável

Types of input supported:
Tipos de entrada suportados:
- número
- texto

Expand All @@ -172,15 +171,15 @@ mostre "a é " e a
mostre "b é " e b
```

## Function Returns
## Retornos de função

Function returns are written as the keyword `retorne` followed by the value/expression/identifier to be returned
Os retornos de função são escritos como a palavra-chave `retorne` seguida pelo valor/expressão/identificador a ser retornado

Function returns have to be inside it's respective function, because the values being returned are bound to that function's scope, but they can also be nested inside other blocks of code, like those of if statements that reside inside the function
Os retornos de função devem estar dentro de sua respectiva função, porque os valores retornados estão vinculados ao escopo dessa função, mas também podem ser aninhados dentro de outros blocos de código, como os de instruções if que residem dentro da função

Function returns also mean that functions can now be called as values, if that function returns a value
Os retornos de função também significam que as funções agora podem ser chamadas como valores, se essa função retornar um valor

Example:
Exemplo:
```
defina a função soma usando a e b

Expand All @@ -195,15 +194,15 @@ b é 8
mostre função soma usando a e b
```

## Comments
## Comentários

There are two types of comments available, multi-line and single-line:
Existem dois tipos de comentários disponíveis, de várias linhas e de uma linha:

Multiline-comments are surrounded by the prefix keyword `comentário` and the suffix `fim do comentário`
Comentários de várias linhas são cercados pela palavra-chave de prefixo `comentário` e o sufixo `fim do comentário`

Single-line comments are surrounded by the prefix keyword `comentário` and the end of the line
Comentários de linha única são cercados pela palavra-chave de prefixo `comentário` e o final da linha

Example:
Exemplo:
```
comentário this is a single-line comment

Expand Down