
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 ...