From 86d2a96c598311d2c84196117c9f094b046881b6 Mon Sep 17 00:00:00 2001 From: blau_araujo Date: Fri, 6 Jun 2025 15:42:51 -0300 Subject: [PATCH] Atualizar README.org --- README.md | 3 -- README.org | 109 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+), 3 deletions(-) delete mode 100644 README.md create mode 100644 README.org diff --git a/README.md b/README.md deleted file mode 100644 index 2b0dca7..0000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# brisa - -Repositório de anotações e ideias para a linguagem de programação Brisa \ No newline at end of file diff --git a/README.org b/README.org new file mode 100644 index 0000000..4b3d6f4 --- /dev/null +++ b/README.org @@ -0,0 +1,109 @@ +* Linguagem ??? + +** 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) + + + +