brisa/README.org

109 lines
3.2 KiB
Org Mode
Raw Normal View History

2025-06-06 15:43:13 -03:00
* Linguagem Brisa
2025-06-06 15:42:51 -03:00
** Tokens
- Separadores de palavras: espaço, tabulação, /tokens/
- Fim de linha: =\n=
- Comentário simples: =;=
2025-06-06 21:35:20 -03:00
- Comentário de bloco e /inline/: =;;; ... ;;;=
2025-06-06 15:42:51 -03:00
- Terminador de declarações: =.= (ponto)
- Operador de atribuição: =<=
- Operador de tipo de retorno: =>=
- Delimitador de indireção: =[IDENTIFICADOR/LISTA]=
2025-06-06 21:35:20 -03:00
** Tipos
*** Tipos inteiros com sinal
2025-06-06 15:42:51 -03:00
- =i8=: 1 byte
- =i16=: 2 bytes
- =i32=: 4 bytes (tipo padrão!)
- =i64=: 8 bytes
- =i128=: 16 bytes
2025-06-06 21:35:20 -03:00
*** Tipos inteiros sem sinal
2025-06-06 15:42:51 -03:00
- =u8=: 1 byte
- =u16=: 2 bytes
- =u32=: 4 bytes
- =u64=: 8 bytes
- =u128=: 16 bytes
2025-06-06 21:35:20 -03:00
*** Tipos de ponto flutuante (apenas com sinal)
2025-06-06 15:42:51 -03:00
- =f32=: 4 bytes
- =f64=: 8 bytes
- =f128=: 16 bytes
2025-06-06 21:35:20 -03:00
*** Tipo indeterminado
2025-06-06 15:42:51 -03:00
Não existe tipo indeterminado (=void=) na linguagem. Por exemplo, =NULL= é implementado como =(int64)0=.
2025-06-06 21:35:20 -03:00
*** Tipo booliano
2025-06-06 15:42:51 -03:00
=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:
#+begin_example
: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'
#+end_example
** Expressões constantes
Sintaxe: =[(TIPO)]EXPRESSÃO=
Sem especificação de tipo...
2025-06-06 15:53:10 -03:00
- ='CHAR'= são sempre =i8=;
2025-06-06 21:35:20 -03:00
- Notações numéricas inteiras são sempre =i32=;
2025-06-06 15:42:51 -03:00
- 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=
2025-06-06 21:35:20 -03:00
*** Bytes (i8)
- Representação de caracteres: ='\n'= (valor ASCII do caractere '\n' - byte 0x0a)
- Outras representações numéricas requerem modelagem =(i8)=
2025-06-06 15:42:51 -03:00
*** 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)