Repositório de anotações e ideias para a linguagem de programação Brisa
LICENSE | ||
README.org |
Linguagem Brisa
Tokens
- Separadores de palavras: espaço, tabulação, tokens
- Fim de linha:
\n
- Comentário simples:
;
- Comentário de bloco e inline:
;;; ... ;;;
- Terminador de declarações:
.
(ponto) - Operador de atribuição:
<
- Operador de tipo de retorno:
>
- Delimitador de indireção:
[IDENTIFICADOR/LISTA]
Tipos
Tipos inteiros com sinal
i8
: 1 bytei16
: 2 bytesi32
: 4 bytes (tipo padrão!)i64
: 8 bytesi128
: 16 bytes
Tipos inteiros sem sinal
u8
: 1 byteu16
: 2 bytesu32
: 4 bytesu64
: 8 bytesu128
: 16 bytes
Tipos de ponto flutuante (apenas com sinal)
f32
: 4 bytesf64
: 8 bytesf128
: 16 bytes
Tipo indeterminado
Não existe tipo indeterminado (void
) na linguagem. Por exemplo, NULL
é implementado como (int64)0
.
Tipo booliano
bool
: 1 byte
- Variáveis do tipo
bool
recebem apenastrue
oufalse
, respectivamente implementados como1
e0
do tipoi8
. - Expressões lógicas sempre resultam em valores
1
ou0
do tipoi32
, portanto não sãobool
. - Ponteiros nulos (
NULL
), o terminador nulo ('\0'
) e inteiros de valor0
sempre avaliam como falso, mas não sãobool
.
Qualificadores e modificadores de escopo
- Constante:
const
– Representa um dado imutável (.rodata
?). - Volátil:
volatile
– Representa um dado de escopo global (.data
?). - Estático:
static
– Representa um dado que mantém seu valor entre chamadas de função. - Restrito:
restrict
– Representa um endereço que só pode ser acessado por um nome de ponteiro.
Variáveis
- Declaração:
[QUALIFICADOR] [*][TIPO]:NOME.
- Inicialização:
[QUALIFICADOR] [*][TIPO]:NOME < VALOR
- Atribuição:
NOME < VALOR
Exemplos:
:var < 42 ; declaração e inicialização da variável 'var' (tipo 'i32') var < 10 ; atribuição do valor 10 à variável 'var' i8:char. ; declaração da variável 'char' com o tipo 'i8' (1 byte) i8:char . ; espaços não fazem diferença após o nome da variável! *:ptr < [var] ; declaração do ponteiro 'ptr' com o tipo *i32 e com o endereço de 'var' [ptr] < 123 ; armazena o valor 123 no endereço apontado por 'ptr'
Expressões constantes
Sintaxe: [(TIPO)]EXPRESSÃO
Sem especificação de tipo…
'CHAR'
são semprei8
;- Notações numéricas inteiras são sempre
i32
; - Notações de ponto flutuante e frações são sempre
f64
.
Inteiros
10
: o mesmo que(i32)10
- Qualquer outro tipo inteiro:
(tipo)número
Bytes (i8)
- Representação de caracteres:
'\n'
(valor ASCII do caractere '\n' - byte 0x0a) - Outras representações numéricas requerem modelagem
(i8)
Ponto flutuante
5.0
: o mesmo que(f64)5.0
20 / 4
: o mesmo que(f64)5.0
- Qualquer outro tipo de ponto flutuante:
(tipo)representação
Cadeias de bytes (vetores do tipo i8)
['c', 'a', 's', 'a', '\n', '\0']
(avalia o endereço do primeiro byte)'casa\n\0'
: o mesmo que['c', 'a', 's', 'a', '\n', '\0']
(avalia o endereço do primeiro byte)"casa\n"
: o mesmo que['c', 'a', 's', 'a', '\', 'n', '\0']
(avalia o endereço do primeiro byte)