Você deve considerar a compilação para C (consulte esta e que responde), ou para algumas outras linguagens (Java, Common Lisp, Ocaml, ou até mesmo uma mistura de Javascript & C - like HOP faz ...) Você também pode compilar a representação textual de LLVM bytecode ou use a biblioteca LLVM como seu back-end, ou (se tiver o GCC 5 ou melhor) use o libgccjit (para segmentar Representações internas do GCC e lucrar com as otimizações do GCC). Você também pode escolher alguns bytecode existentes (por exemplo, JVM, Ocaml, Neko, Parrot, ...) e compilá-los. E você também pode usar alguma biblioteca JIT como libjit
, GNU lightning, asmjit
etc ...
Lexing & análise não é o trabalho principal de um compilador ou intérprete. Eles são as partes simples. Um compilador é principalmente transformar (muitas vezes em várias passagens) algumas representações internas (em particular Abstract Syntax Trees , mas não apenas eles) do código-fonte que está compilando. Um intérprete freqüentemente está transformando algumas representações internas, em seguida, percorrendo outras (por exemplo, algum bytecode ou alguma AST normalizada). Jogue com a GCC -fdump-tree-all
, e talvez com MELT (uma DSL tipo Lisp para inspecionar e / ou transformar as representações internas do GCC). A semântica da sua linguagem de programação é mais importante que a sintaxe.
Uma parte importante é gerenciamento de memória . Você quer um coletor de lixo (é uma parte essencial da sua semântica)? E quanto a digitar (estático ou dinâmico) & inferência de tipos ? Você lida com chamadas de última hora ? Você quer homoiconicity ? metaprogramação ? Você quer fechamentos (eles geralmente precisam de um GC)? Considere o GC conservador de Boehm e / ou leia o manual do GC .
Bootstrapping compiladores é importante. Veja também este e as referências que eu dei lá. Leia também esta & que responde explicando técnicas & detalhes práticos (e deve curar sua dor de cabeça sobre "Haskell escrito em Haskell", "Ocaml escrito em Ocaml", "MELT escrito em MELT", "CAIA escrito em CAIA", "GCC ou Clang / LLVM escrito em C ++"). / p>
Além disso, se você não conhece nenhuma delas, brinque com Ocaml, Common Lisp, Haskell ou Scheme (veja também SICP ). Leia o livro de Scott sobre Pragmática da Linguagem de Programação e o livro da Queinnec sobre Lisp em pequenos pedaços .
Certifique-se de que a implementação do seu idioma seja um software livre (em link você encontrará muitas outras implementações de linguagem - por exemplo, compiladores ou intérpretes).