2011-01-19 14 views
7

¿Cómo se puede agregar una nueva palabra clave a clang? La nueva palabra clave debe ser un calificador de función. ¿A dónde iría la parte de la declaración?¿Cómo se puede agregar una nueva palabra clave a clang, una palabra clave que se trataría como principal?

Gracias.

+0

suena como si necesitara adentrarse en las secciones de análisis y léxico para clang/LLVM y vaya desde allí, sospecho que probablemente obtenga una mejor ayuda de la lista de correo de clang – Necrolis

+0

he editado IdentifierTabe.cpp, y agregado la nueva palabra clave to TokenKinds.def en cuanto a analizar y leer. No puedo encontrar el comportamiento de main desde C ya que no sé dónde está definido. –

+0

[Una de las desventajas de Clang frente Elsa] (http://clang.llvm.org/comparison.html#elsa) es que Elsa utiliza un buen analizador completamente basado en reglas gramaticales. Siempre me he preguntado por qué los desarrolladores Clang no eligieron a escribir su analizador de la misma manera ... – peoro

Respuesta

7

hay que añadir que para incluir/ruido metálico/básico/TokenKinds.def, y luego añadir un nuevo caso de ParseDeclarationSpecifiers (...).

Probablemente una opción más fácil sería definir un nuevo atributo, y luego usar

#define your_new_qualifier __attribute__((your_new_attribute))

De lo contrario habría que añadir este apoyo calificador a la AST, que podría ser propenso a errores, mientras los atributos se propagan automáticamente a través de varias declaraciones de la misma función.

+0

¿Dónde defino su comportamiento? ¿hay alguna documentación sobre dónde se implementa el comportamiento, al lado del código? –

+1

no he visto ninguna documentación sobre este aspecto particular de Sonido metálico, pero es muy fácil de copiar y pegar cosas similares - en su caso, sería una implementación de 'inline', por ejemplo (ésta se encuentra en AST), o el atributo de espacio de direcciones para la segunda opción. –

+1

En qué archivo que tenemos que hacer #define your_new_qualifier __attribute __ ((your_new_attribute)) y dónde agregar "your_new_attribute" –

Cuestiones relacionadas