2011-01-04 21 views
8

की आवश्यकता है मुझे सी/सी ++ इंटरफ़ेस (सी को प्राथमिकता दी गई) के साथ सी ++ पार्सर लाइब्रेरी का उपयोग करने में आसान, स्थिर और संभवतः उपयोग करना आसान है।
मुझे लगता है कि सिंट अच्छा सी ++ दुभाषिया है। क्या मैं इस उद्देश्य के लिए इसका उपयोग कर सकता हूं (या इसका कुछ हिस्सा)?
कोई सुझाव?सी ++ पार्सर

+1

असली सवाल यह है, "आपका उद्देश्य क्या है?"। बहुत ही सरल कार्यों के लिए, सिंट सहायक हो सकता है। किसी भी परिष्कृत विश्लेषण के लिए, आपको एक पूर्ण सी ++ कंपाइलर फ्रंट एंड के बराबर की आवश्यकता होगी (सी ++ के लिए नाम संकल्प एक कुतिया है)। * कोड * को बदलने के किसी भी प्रयास के लिए आपको ऐसे टूल की आवश्यकता होगी जो स्रोत की यात्रा के दौर में हो सकें, और उनमें से बहुत कम हैं। –

+0

@Ira: 'cint' * एक पूर्ण C++ complier है ... यह मूल कोड जनरेशन मोड के साथ-साथ व्याख्या में भी चलाया जा सकता है। चाहे यह आर्टिम की ज़रूरतों के लिए अच्छी तरह से संरचित है या नहीं, मैं आपको नहीं बता सका। – dmckee

+0

@dmckee: तो ऐसा लगता है कि सिंट की संभावना पूर्ण नाम/प्रकार का संकल्प है, और यह आर्टिम के लिए पर्याप्त हो सकता है, और ऐसा नहीं हो सकता है। उसे अभी भी अपने उद्देश्य के बारे में स्पष्ट होना चाहिए इससे पहले कि कोई भी स्पष्ट हो सके कि उसके लिए असली समाधान क्या है। –

उत्तर

10

देखें: http://clang.llvm.org/ इसमें सी ++ और सी इंटरफेस (libclang) दोनों हैं।

+0

दुर्भाग्य से, अभी तक एएसटी तक कोई सादा सी पहुंच नहीं है (और एक को लागू करने की कोई योजना नहीं है)। –

+0

मुझे लगता है कि एबीटी के माध्यम से libclang के माध्यम से चलना संभव होना चाहिए। उदाहरण देखें । – kbjorklu

+0

उत्तर के लिए धन्यवाद, मैं अब क्लैंग का परीक्षण करने जा रहा हूं। लगता है, यह समाधान हो सकता है ... – Artem

1

मुझे सिंट के बारे में पता नहीं है, लेकिन मैंने सुना है कि लोग इस के लिए gcc-xml का उपयोग करते हैं।

मैं भी एक अच्छी स्टैंड-अलोन लाइब्रेरी की तलाश में हूं, लेकिन मुझे कोई नहीं मिला है।

9

सी ++ पार्सिंग प्रसिद्ध रूप से कठिन है। AFAIK केवल तीन पार्सर्स हैं जो आज के मानकों द्वारा स्वीकार्य हैं: ईडीजी (लोकप्रिय सी ++ कंपाइलर्स में फ्रंटएंड के रूप में व्यापक रूप से उपयोग किया जाता है), जीसीसी और माइक्रोसॉफ्ट के। और जाहिर है, माइक्रोसॉफ्ट ने इंटेलिजेंस के लिए वीएस -2010 में ईडीजी के पार्सर का उपयोग करना शुरू कर दिया है।

जब आप मुफ्त विकल्पों को देख रहे हैं, तो आप जीसीसी में काफी अटक गए हैं। यह एक्सएमएल का उत्पादन कर सकता है, हालांकि, आसान हिस्सा वहां है। (सी ++ पार्सिंग मानकों द्वारा आसान, यह है)

+2

क्लैंग काफी काम कर रहा है। क्या लापता विवरण इस पर विचार करने के लिए बहुत अधिक हैं * स्वीकार्य * या पाठक के लिए अभ्यास के रूप में नहीं छोड़ा गया है :) –

+2

"पार्स बूस्ट" मेरा व्यक्तिगत मानदंड है। और मैं समझता हूं कि क्लैंग अभी तक नहीं है। – MSalters

+0

@MSalters, क्लैंग प्रोजेक्ट का दावा अब बूस्ट को संकलित करने में सक्षम है, लेकिन केवल आंशिक रूप से क्यूटी को संकलित कर सकता है ताकि वे वहां जा रहे हों, लेकिन मुझे नहीं लगता कि मैं इसके साथ उत्पादन कोड संकलित करने का प्रयास करना चाहता हूं। http://clang.llvm.org/cxx_status.html – Glen

2

क्लेंग एक सभ्य सी ++ एपीआई (लेकिन कोई सादा सी) के साथ सबसे अद्यतित और परिपक्व विकल्प है। एल्सा बहुत पुरानी है और अनजान है, लेकिन अभी भी एक उपयोगी विकल्प है। दोनों पुस्तकालयों के साथ ही स्टैंडअलोन एक्सएमएल फ्रंटेंड के रूप में इस्तेमाल किया जा सकता है।

+0

"क्लैंग वर्तमान में 'निर्यात' (जिसे सी ++ '0x ड्राफ्ट से हटा दिया गया है) को छोड़कर सभी आईएसओ सी ++ 1998 मानक (आईएसओ सी ++ 2003 मानक में संबोधित दोषों सहित) लागू करता है और इसे उत्पादन-गुणवत्ता सी ++ कंपाइलर माना जाता है "तिथि: 2011-07-27 clang.llvm.org/cxx_status.html - Grzegorz Wierzowiecki –

1

यदि आप बहादुर महसूस कर रहे हैं तो "is there a yacc-able C++ grammar?" के उत्तर में दिए गए लिंक उपयोगी हो सकते हैं। जीसीसी-एक्सएमएल और क्लैंग को पहले से ही सुझाव दिया गया है और Swig also has an XML output जो आप प्राप्त करने की कोशिश कर रहे हैं उसके आधार पर प्रासंगिक हो सकता है।

+3

" बहादुर लग रहा है "गलत शब्द होगा। आपको पूर्ण सी ++ पार्सर जैसे कार्य को लेने के लिए ओलंपियन महसूस करना होगा। –

2

आप सी या सी ++ कोड पार्स करने के लिए चाहते हैं, वहाँ कुछ विकल्प हैं: http://bellard.org/tcc/ http://students.ceid.upatras.gr/~sxanth/ncc/

आप एक पार्सर बनाना चाहते हैं C/C++ का उपयोग कर, आप की कोशिश कर सकते हैं: http://boost-spirit.com/home/ http://dinosaur.compilertools.net/ लेक्स और Yacc http://www.codeguru.com/csharp/.net/net_general/patterns/article.php/c12805 फ्लेक्स और बाइसन

1

मैं इसे की कोशिश नहीं की है, लेकिन मुझे लगता है कि सबसे अच्छा विकल्प मॉड्यूल हो रही हो जाएगा सी ++ के लिए gcc जैसे कुछ लोकप्रिय ओपन सोर्स कंपाइलर से पार्सिंग के लिए;

शायद तुम http://www.nobugs.org/developer/parsingcpp/

2

हमारे C++ Front End सी ++ बोलियों (एएनएसआई, जीसीसी, MSVS) की एक किस्म को पार्स करने में सक्षम है कुछ यहाँ दिलचस्प मिल जाएगा, स्वचालित रूप से ASTs जिसका नोड्स सटीक स्रोत पदों के साथ चिह्नित कर रहे हैं और सजाया जाता है बनाता है किसी भी पास के टिप्पणी पाठ के साथ, और एक पूर्ण प्रतीक तालिका बनाता है। (जनवरी 2013 संपादित करें: सी ++ फ्रंट एंड काफी समय से सी ++ 11 को संभालने में सक्षम है)।

सी ++ फ्रंट एंड हमारे DMS Software Reengineering Toolkit के शीर्ष पर बनाया गया है, जो प्रोग्राम टूल विश्लेषण और रूपांतरण के लिए सामान्यीकृत कंपाइलर तकनीक है, जो कस्टम टूल बिल्डिंग का समर्थन करने के लिए डिज़ाइन किया गया है। सी ++ फ्रंट एंड में एक प्रीप्रोसेसर शामिल है, जिसमें प्रीप्रोसेसर निर्देशों का विस्तार किया जा सकता है या सामूहिक रूप से या व्यक्तिगत रूप से कार्य के लिए उपयुक्त नहीं हो सकता है। इसमें सभी गंदा कोएनिग लुकअप सामान के साथ पूर्ण प्रतीक निर्माण भी शामिल है।

डीएमएस स्पष्ट भाषा परिभाषाओं को स्वीकार करता है (इस तरह यह सी ++ को समझता है; सी, सी #, जावा, कोबोल और अन्य भाषाओं की विविधता भी होती है)।डीएमएस सामान्य पार्सिंग, प्रतीक टेबल बिल्डिंग, फ्लो विश्लेषण मशीनरी, पेड़ नेविगेशन/निरीक्षण/संशोधन, स्रोत-से-स्रोत परिवर्तन, और एएसटी-टू-सोर्स टेक्स्ट पुनर्जागरण के लिए प्रक्रियात्मक एपीआई प्रदान करता है जिसमें मूल टिप्पणियां, संख्या की गति आदि शामिल हैं। ये क्षमताओं सी ++ फ्रंट एंड द्वारा उपयोग के लिए उपलब्ध हैं।

डीएमएस को गंभीर कार्यों के लिए आवश्यक पैमाने को संभालने के लिए भी डिज़ाइन किया गया है। अक्सर आपको केवल एक संकलन इकाई की आवश्यकता नहीं होती है (जो कि जीसीसी आपको सबसे अच्छा प्रदान करेगा) लेकिन पूरे सेट तक पहुंच। डीएमएस का उपयोग हजारों सी ++ संकलन इकाइयों का विश्लेषण/परिवर्तन करने के लिए किया गया है, और सचमुच हजारों सी संकलन इकाइयों (25 मिलियन लाइन आवेदन पर) का विश्लेषण किया गया है।

"लाइब्रेरी का उपयोग करने में आसान" प्रोग्राम मैनिपुलेशन टूल की बात आती है जब ऑक्सीमोरोन होता है। लैंगुग स्वयं जटिल होते हैं (सी ++ सबसे मुश्किल में से एक है और सी ++ 0 एक्स के साथ बदतर हो रहा है) और यह उन प्रश्नों की प्रकृति में जटिलता को प्रेरित करता है जो आप पूछ सकते हैं और उत्तर क्या दिखते हैं (उदाहरण के लिए "क्या कोई टेम्पलेट इंस्टॉलेशन है किसी भी नेमस्पेस एन में कक्षा सी में विधि वाई में स्थानीय चर एक्स को संशोधित कर सकते हैं? ")। सवाल स्वयं कठिन हैं।

आप जो चाहते हैं उसे आवश्यक जटिलता के साथ एक लाइब्रेरी है जो आपको अपना कार्य बंद करने देती है। आवश्यक जटिलता प्रदान करने के लिए पिछले 15 वर्षों से डीएमएस निरंतर विकास में है। यदि आप गंभीर कार्यक्रम प्रसंस्करण करना चाहते हैं, तो मेरा दावा है कि आपको उस जानकारी की आवश्यकता होगी।

सबूत के रूप में, डीएमएस का उपयोग बोइंग के लिए सी ++- आधारित मिशन एवियनिक्स सॉफ्टवेयर के बड़े पैमाने पर स्वचालित पुनर्वितरण करने के लिए किया गया है। मुझे विश्वास नहीं है कि ऐसा कोई अन्य उपकरण है जो ऐसा कर सकता है। (क्लैंग कोशिश कर रहा है, लेकिन केवल सी ++ के लिए। वाईएमएमवी)।

+0

आपके उत्पाद की कीमत? – Artem

+0

यह एक उद्यम उत्पाद है; मूल्य निर्धारण विन्यास और योजनाबद्ध तैनाती पर निर्भर करता है। बिक्री टीम से संपर्क करें। –

संबंधित मुद्दे