मैं एक सी ++ स्रोत विश्लेषक प्रोजेक्ट पर काम कर रहा हूं और ऐसा लगता है कि क्लैंग पार्सिंग काम के लिए अच्छा उम्मीदवार है। समस्या यह है कि क्लैंग भारी रूप से आधारभूत संरचना "llvm" प्रोजेक्ट पर निर्भर करता है, किसी भी ठोस मशीन उन्मुख बैकएंड के बिना क्लीन फ्रंट-एंड प्राप्त करने के लिए मैं इसे कैसे कॉन्फ़िगर कर सकता हूं? एलसीसी की तरह ही, वे उन लोगों के लिए "शून्य" बैकएंड प्रदान करते हैं जो पार्सर भागों पर ध्यान केंद्रित करते हैं। किसी भी सुझाव की सराहना की है।स्वच्छ क्लैंग फ्रंट-एंड कैसे बनाएं?
उत्तर
मैंने हाल ही में विंडोज़ पर यह किया है।
here से क्लैंग और एलएलएम स्रोत डाउनलोड करें।
सेमेक और पायथन स्थापित करें (दस्तावेज़ों के विपरीत, आपको केवल क्लेंग बनाने के लिए पाइथन की आवश्यकता है; कम से कम, cmake देता है अगर उसे पाइथन रनटाइम नहीं मिल रहा है)।
आपको वीएस -2008 या वीएस -2010 की भी आवश्यकता है।
एक बात यह है कि पूरी तरह से स्पष्ट नहीं है आवश्यक निर्देशिका संरचना है:
projectRoot
build <- intermediate build files and DLLs, etc. will go here
llvm <- contents of llvm-3.0.src from llvm-3.0.tar go here
tools
clang <- contents of clang-3.0.src from clang-3.0.tar go here
और बाद चरण 4 से windows build instructions का पालन करें। Cmake GUI का उपयोग करने का प्रयास न करें, यह एक डरावनी है; बस निर्माण निर्देशों में दिए गए आदेशों का उपयोग करें।
एक बार निर्माण पूरा हो गया है (जो कुछ समय लगता है) आप होगा:
projectRoot
build
bin
Release <- libclang.dll will be here
lib
Release <- libclang.lib will be here
llvm
tools
clang
include
clang-c <- Index.h is here
Index.h अपने स्रोत कोड के बारे में जानकारी करने के लिए एपीआई परिभाषित करता है; इसमें एपीआई के बारे में काफी कुछ दस्तावेज शामिल हैं।
बजना का उपयोग कर प्रारंभ करने के लिए आप कुछ तरह की जरूरत है: मशीन विशिष्ट जानकारी के बिना
CXIndex index = clang_createIndex(1, 1);
// Support Microsoft extensions
char *args[] = {"-fms-extensions"};
CXTranslationUnit tu = clang_parseTranslationUnit(index, "mySource.c", args, ARRAY_SIZE(args), 0, 0, 0);
if (tu)
{
CXCursor cursor = clang_getTranslationUnitCursor(tu);
// Use the cursor functions to navigate through the AST
}
धन्यवाद arx! मैं तुम्हारा दृष्टिकोण कोशिश कर रहा हूँ। –
हाँ यह पूरी तरह से काम करता है। –
दुर्भाग्य से, आप नहीं मिल सकता है "शुद्ध" सामने के अंत। सी/सी ++ मूल रूप से मशीन से जुड़ी भाषाएं हैं। प्रीप्रोसेसर और अंतर्निर्मित परिभाषाओं के बारे में सोचें, बिल्टिन प्रकारों के आकार इत्यादि। इनमें से कुछ को संक्षिप्त किया जा सकता है, लेकिन उदा। पूर्वप्रक्रमक।
कुछ समर्थन पुस्तकालय (जो कुछ उपयोगिता कक्षाएं और ओएस-स्वतंत्र कोड प्रदान करता है) के अलावा आपको पूर्ण एलएलवीएम की आवश्यकता नहीं है। क्लैंग के कौन से पुस्तकालय आप उपयोग कर रहे हैं? –
मैं पूरे क्लैंग निष्पादन योग्य लेकिन एक डमी बैक-एंड के साथ उपयोग करने जा रहा हूं। –
क्या आप 'libclang' के बारे में जानते हैं? यह एक सी पुस्तकालय है (एक गारंटीकृत स्थिर इंटरफ़ेस के साथ) जो क्लैंग एएसटी का पर्दाफाश कर सकता है। यह बहुत हल्का है। अन्यथा, आप बस सी ++ पुस्तकालयों का उपयोग कर सकते हैं (सावधान रहें कि इंटरफेस * स्थिर नहीं है), निष्पादन योग्य सामान जो आपके लिए वास्तव में उपयोगी नहीं होंगे, मुझे लगता है। –