2011-01-19 10 views
7

Come può essere aggiunta una nuova parola chiave a clang? La nuova parola chiave dovrebbe essere un qualificatore di funzione. Dove andrebbe la parte della dichiarazione?Come si può aggiungere una nuova parola chiave a clang, una parola chiave che sarebbe trattata come principale?

Grazie.

+0

suona come se fosse necessario eseguire il pop nelle sezioni di parsing e lexing per clang/LLVM e passare da lì, ho il sospetto che probabilmente otterresti un aiuto migliore dalla mailing list clang – Necrolis

+0

ho modificato IdentifierTabe.cpp e ho aggiunto la nuova parola chiave a TokenKinds.def fino a parsing e lexing Non riesco a trovare il comportamento di main da C poichè non so dove sia definito. –

+0

[Uno degli svantaggi di Clang versus Elsa] (http://clang.llvm.org/comparison.html#elsa) è che Elsa utilizza completamente un parser basato su regole grammaticali. Mi sono sempre chiesto perché gli sviluppatori di Clang non abbiano scelto di scrivere il loro parser allo stesso modo ... – peoro

risposta

7

È necessario aggiungerlo a include/clang/Basic/TokenKinds.def e quindi aggiungere un nuovo caso a ParseDeclarationSpecifiers (...).

Probabilmente una scelta più facile sarebbe quella di definire un nuovo attributo, e quindi utilizzare

#define your_new_qualifier __attribute__((your_new_attribute))

Altrimenti dovreste aggiungere questo supporto qualificazione alla AST, che potrebbe essere soggetto a errori, mentre gli attributi vengono propagati automaticamente attraverso varie dichiarazioni della stessa funzione.

+0

Dove definisco il suo comportamento? c'è qualche documentazione su dove è implementato il comportamento, accanto al codice? –

+1

Non ho visto alcuna documentazione su questo particolare aspetto di Clang, ma è abbastanza facile copiare e incollare cose simili - nel tuo caso sarebbe un'implementazione di 'inline', per esempio (questo è in AST), o l'attributo spazio indirizzo per la seconda opzione. –

+1

In quale file dobbiamo #define your_new_qualifier __attribute __ ((your_new_attribute)) e dove aggiungere "your_new_attribute" –

Problemi correlati