Pergunta

Se eu quisesse modificar ou acrescentar minhas próprias extensões para C, e adicioná-los para o compilador GCC C, o que eu preciso fazer? Eu não quero propor mudanças à linguagem, eu quero saber como o compilador C realmente funciona.

Eu tive uma olhada no código fonte para GCC e parece que Objective-C é implementado como um analisador simples que gera código que faz referências a uma biblioteca de tempo de execução modificado e, em seguida, por tudo o que é C baseados em TI usa o compilador C comum. Não estudei intensamente para que eu provavelmente não estou no caminho certo.

Digamos, por exemplo, eu queria acrescentar minha própria palavra-chave para Objective-C, apenas por diversão. Quero acrescentar algo que parece fácil de implementar, como talvez @assert. Tudo que eu quero é que @assert para chamar uma função que vou acrescentar ao tempo de execução Objective-C:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");

Obviamente, eu poderia apenas implementar isso como chamada de função e de qualquer modo macro, mas eu quero ganhar uma compreensão dos de análise e compilação estágios de código-fonte C, e talvez por isso eu poderia acrescentar minhas próprias extensões para uma linguagem para meu próprio uso .

O código fonte Eu olhei consistentemente se refere a "árvores" e há muitas, muitas macros que executam ações ou obter informações a partir destas árvores.

Existe alguma documentação em torno de que explica esse tipo de coisa em profundidade?

Foi útil?

Solução

As árvores são mais provável árvore sintática abstrata (AST) e qualquer livro compilador irá ensinar aquele. O livro dragão é muito clássico, na classe I levou usamos The essence of compilers por Robin Hunter, ISBN 0-13-727835-7. Você também deve ser capaz de encontrar toneladas de material de diferentes faculdades e universidades com alguns termos boa busca (projeto de compiladores, AST, análise léxica, análise de cima para baixo, de baixo para cima a análise, análise semântica, LL , LR).

Outras dicas

Depende se você já está familiarizado com compiladores em geral ou não. Se não, começar com o Dragão Livro . Se sim, então GCC já tem alguma documentação para você:

  1. O GCC Internals manual
  2. GCC Wiki , em particular, a Obter página Iniciado contém informações sobre muitas coisas, árvores CCG incluído.

Depende de como você está fazendo isso - mas você pode gostar de olhar para a implementação GCC da linguagem de programação D - GCD . Este é um trabalho em andamento, mas é uma língua cheia implementado no âmbito GCC sem (ainda) muito se qualquer reconhecimento dentro da equipe GCC. As experiências GCD pode ser salutar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top