* 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)