brisa/README.org
2025-06-06 21:35:20 -03:00

3.2 KiB
Raw Permalink Blame History

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 byte
  • i16: 2 bytes
  • i32: 4 bytes (tipo padrão!)
  • i64: 8 bytes
  • i128: 16 bytes

Tipos inteiros sem sinal

  • u8: 1 byte
  • u16: 2 bytes
  • u32: 4 bytes
  • u64: 8 bytes
  • u128: 16 bytes

Tipos de ponto flutuante (apenas com sinal)

  • f32: 4 bytes
  • f64: 8 bytes
  • f128: 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 apenas true ou false, respectivamente implementados como 1 e 0 do tipo i8.
  • Expressões lógicas sempre resultam em valores 1 ou 0 do tipo i32, portanto não são bool.
  • Ponteiros nulos (NULL), o terminador nulo ('\0') e inteiros de valor 0 sempre avaliam como falso, mas não são bool.

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 sempre i8;
  • 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)