İşte bazı noktalar şunlardır: tools/clang/lib/Driver/Types.cpp
yılında
Eğer lookupTypeForExtension
var ki uzantısı dayalı derlenen kodun "type" belirler. Örneğin, .m
uzantısı için TY_ObjC
döndürür. Ayrıca verilen tip çözümleyici bir LangOptions
üyesi var Preprocessor
yoluyla bilir ... ayrıştırma o kanalın hangi dili bildiğini gelince Amaç C.
ait olup olmadığını belirler isObjC
yüklemi var. İkincisi include/clang/Basic/LangOptions.def
'da tanımlanan birçok seçeneğe sahiptir. Örneğin, ObjC1
ve ObjC2
. Bunlar 'da ayarlanır ve sonunda CompilerInvocation::CreateFromArgs
'dan çağrılır.
Clang sürücüsünün clang ön ucunu ek komut satırı argümanlarından geçirerek "alt işlem" olarak çağırdığını unutmayın. Sürücü gcc uyumlu ve ön clang kendisi olarak görülebilir. Ayrıca IMHO, argoya fazladan ayrıştırıcı eklemede çok fazla sorun olacaktır. Her şey modüler olsa da, her şeyi bir araya getirmek ve birleştirmek için çok fazla iş yapılmalıdır. Diliniz ObjC'yi genişletiyorsa, mevcut ayrıştırıcıyı kullanın. Eğer dil tamamen farklı bir şey ise, o zaman clang sizin için iyi bir seçenek olmayabilir.
Genişletilmiş diliniz C/C++/Objective-C'ye benzer mi? Clang bu tür dillerin önüdür. Arka ucunu (optimizasyon vb.) Tekrar kullanmak istiyorsak, sadece LLVM'ye ihtiyacımız var. –
Dil, Objective-C++ (söz dizimi değil, semantik) ile benzer olacaktır. Önişlemci aynıdır. – finnsson
Clang hakkında fazla bir şey bilmiyorum. Peki o zaman ObjC'ye nasıl yazılır? –