Pregunta

Si quisiera modificar o agregar mis propias extensiones a C y agregarlas al compilador de GCC C, ¿qué tendría que hacer? No quiero proponer cambios en el idioma, quiero saber cómo funciona realmente el compilador de C

He echado un vistazo al código fuente de GCC y parece que Objective-C se implementa como un simple analizador que genera código que hace referencias a una biblioteca de tiempo de ejecución modificada y luego a todo lo que está basado en C utiliza el compilador regular de C. No lo he estudiado intensamente, así que probablemente no estoy en el camino correcto.

Por ejemplo, quiero agregar mi propia palabra clave a Objective-C, solo por diversión. Quiero agregar algo que parezca fácil de implementar, como quizás @assert . Todo lo que quiero es que @assert llame a una función que agregaré al tiempo de ejecución de Objective-C:

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

Obviamente, podría implementar esto como función call y macro, pero quiero entender las etapas de análisis y compilación del código fuente C, y tal vez pueda agregar mis propias extensiones a un lenguaje para mi propio uso. .

El código fuente que he consultado se refiere de forma consistente a " árboles " y hay muchas, muchas macros que realizan acciones u obtienen información de estos árboles.

¿Hay alguna documentación que explique este tipo de cosas en profundidad?

¿Fue útil?

Solución

Lo más probable es que los árboles árboles de sintaxis abstracta (AST) y cualquier libro del compilador enseñará ese. El libro del dragón es muy clásico, en la clase que tomé usamos La esencia de los compiladores por Robin Hunter, ISBN 0-13-727835-7. También debería poder encontrar toneladas de material de diferentes colegios y universidades con algunos buenos términos de búsqueda (diseño del compilador, AST, análisis léxico, análisis de arriba hacia abajo, análisis de abajo hacia arriba, análisis semántico, LL , LR).

Otros consejos

Depende de si ya está familiarizado con los compiladores en general o no. Si no, comience con el Dragon Book . Si es así, entonces GCC ya tiene algo de documentación para usted:

  1. El Manual de Internos de GCC
  2. El GCC Wiki , en particular, el Getting Started página contiene información sobre muchas cosas, incluidos los árboles GCC.

Depende de cómo lo esté haciendo, pero le gustaría buscar la implementación GCC del lenguaje de programación D - GCD . Este es un trabajo en progreso, pero es un lenguaje completo implementado en el marco de GCC sin (todavía) mucho reconocimiento dentro del equipo de GCC. Las experiencias de GCD pueden ser saludables.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top