109 lines
3.2 KiB
Org Mode
109 lines
3.2 KiB
Org Mode
* 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 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:
|
|
|
|
#+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...
|
|
|
|
- =`CHAR`= são sempre =i8=;
|
|
- Expressões numéricas inteiras são sempre =i32=;
|
|
- Notações de ponto flutuante e frações são sempre =f64=.
|
|
|
|
*** Bytes (i8)
|
|
|
|
- ='\n'= (valor ASCII do caractere '\n' - byte 0x0a)
|
|
- =(i8)0x0a=
|
|
- =(i8)10= (byte 0x0a em decimal)
|
|
- =(i8)012= (byte 0x0a em octal)
|
|
- =(i8)1010b= (byte 0x0a em binário)
|
|
|
|
*** Inteiros
|
|
|
|
- =10=: o mesmo que =(i32)10=
|
|
- Qualquer outro tipo inteiro: =(tipo)número=
|
|
|
|
*** 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)
|
|
|
|
|
|
|
|
|