Projeto Sammer Language atualizado !

13. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 03/09/2018 - 18:40h

OPS !!!

Bug encontrado e já corrigido ... seguinte: não tinha testado em 64 BITS.



// funcao com BUG ... somente em 64 bits.
void emit_cmp_eax_var (ASM *a, void *var) {
// 39 05 60 40 40 00 cmp %eax,0x404060
g2(a,0x39,0x05);
*(void**)a->p = var;
a->p += 4; // ! OK
}




// funcao codificada corretamente em 32/64 bits
// arquivo: src/asm.c
void emit_cmp_eax_var (ASM *a, void *var) {
#if defined(__x86_64__)
g3(a,0x39,0x04,0x25);
*(void**)a->p = var;
a->p += 4; // ! OK
#else
// 39 05 60 40 40 00 cmp %eax,0x404060
g2(a,0x39,0x05);
*(void**)a->p = var;
a->p += 4; // ! OK
#endif
}


Nesses próximos dias vou dar uma "pausa", pois estou de férias ... só curtindo ... sol, viagens/compras, casa/rede/família, "meditar +" ...

T++.



  


14. Estudar

XPTO DA SILVA
XPTO1225

(usa Ubuntu)

Enviado em 09/09/2018 - 22:31h

Cara, estou pensando em começar a estudar compiladores. Em qual material de estudos tu se baseia? Como aprendeu sobre compiladores?


15. Re: Projeto Sammer Language atualizado !

???
gokernel

(usa Linux Mint)

Enviado em 11/09/2018 - 09:26h

"XPTO1225", escreveu:


Cara, estou pensando em começar a estudar compiladores. Em qual material de estudos tu se baseia? Como aprendeu sobre compiladores?


Olá cara !

Bom, uma "linguagem/compilador" se divide basicamente em 3 partes:
----------------------------------------------------------------------------------------

01: A Entrada(do texto) ou Scanner: ... processado pelo: Analisador Léxico | lex();

02: O Parser em si ... alguns geram "tokens" usando REalloc ou Lista Encadeadas, neste caso gastam mais memória e demoram mais para compilar ... na Summer Language não gero "tokens" alocando mais memória, mas passo direto para o BACK-END.

03: A Saida: O BACK-END ... alguns usam VM ou Código de máquina... a Summer Language usa VM ou Opcode Assembly X86.

----------------------------------------------------------------------------------------

Para desenvolver a Summer Language minhas referências de base foram:

01: Estudei muito até "amadurecer acho eu", como base me inspirei muito no TCC(Tiny C Compiler ) : https://bellard.org/tcc/

02: A parte de Expressões usai a base do livro: C Completo e Total... uma edição antiga ...

03: A parte do JIT (arquivo: src/asm.c ) aprendi muito usando/testando códigos com o programa "objdump"
EXEMPLO: objdump -d programa > saida.c

Lendo na net li algo(não lembro onde vi) que em uma linguagem, a última parte deve-se dedicar a otimização da velocidade de execução.

Um bom exemplo para começar com uma simples linguagem é tentar no Parser esse exemplo, usando apenas inteiros:



int a = 10, b = 20, c = 3, d = 5, i;

// 215 ...
i = a * b + c * d; // por incrível que pareça, essa é a parte mais difícil de se fazer ...

//
// e uma chamada de funcao para ver o resultado:
//
funcao_alguma_coisa(i);



Qualquer coisa me manda uma MP ou E-mail, que debateremos +... enquanto estou de férias OK ?

Acho que é só isso ...




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts