2008-11-17 9 views
6

मैं एक Windows आधारित पुस्तकालय जो सी फाइलों का एक समूह को पार्स वैश्विक और स्थानीय चर सूची के लिए इस्तेमाल किया जा सकता के लिए देख रहा हूँ। वैश्विक और स्थानीय चर टाइपिफ़ का उपयोग करके घोषित किया जा सकता है। उत्पादन (अर्थात वैश्विक और स्थानीय चर की सूची) तो पोस्ट प्रोसेसिंग (उदाहरण, एक नए नाम के साथ चर नाम की जगह) के लिए इस्तेमाल किया जा सकता है।पार्स सी फ़ाइलों

इस तरह के एक पुस्तकालय उपलब्ध है?

उत्तर

11

उपलब्ध तरीकों में से कुछ:

वैकल्पिक ly आप लिख सकते हैं अपने खुद के lex and yacc (या उनके kin- फ्लेक्स और जंगली भैंसों) एक सार्वजनिक lex specification और एक yacc grammar का उपयोग कर का उपयोग करते हुए।

+0

यह भी देखें: http://code.google.com/p/pycparser/ –

+0

धन्यवाद, मैं इसे सूची में जोड़ दूंगा। – luke

3

शायद overkill है, लेकिन वहाँ एक पूरा एएनएसआई सी पार्सर Boost.Spirit के साथ लिखा है: http://spirit.sourceforge.net/repository/applications/c.zip

हो सकता है कि आप अपनी आवश्यकताओं के अनुरूप यह मॉडल करने के लिए सक्षम हो जाएगा।

1

मैं अगर यह एक पुस्तकालय प्रदान करता है पता नहीं है, लेकिन CTAGS पर एक नजर है।

0

यदि यह सादा सी है, lex और yacc अपने दोस्त हैं, लेकिन आप खाते सी पूर्वप्रक्रमक पर लेने की जरूरत - अविस्तारित मैक्रो के स्रोत फ़ाइलों को आम तौर पर सी वाक्य रचना का पालन नहीं करते हैं, इसलिए पार्सर, में कश्मीर & आर व्याकरण के साथ लिखा दिमाग, सबसे अधिक संभावना असफल हो जाएगी।

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

मैं जीसीसी के साथ इस किया था और अंत में विभिन्न दृष्टिकोण का उपयोग कर अपने लक्ष्य को प्राप्त करने के लिए फैसला किया। यदि आपको चर के लिए नाम बदलने की जरूरत है, तो नियमित अभिव्यक्तियां ठीक होंगी, और पूर्ण पार्सर, IMHO बनाने की कोई आवश्यकता नहीं है। यदि आपका लक्ष्य केवल डेटा एकत्र करने के लिए है, तो डेटा का अंतिम स्रोत डीबग जानकारी है। बाइनरी से डीबग जानकारी प्राप्त करने के तरीके हैं - डीडब्ल्यूएआरएफ के साथ ईएलएफ एक्जिक्यूटिव के लिए विंडोज़-लैंड (सीओएफएफ?) के लिए libdwarf भी कुछ होना चाहिए। शायद आप बाइनरी के बारे में डीबग जानकारी प्राप्त करने के लिए कुछ मौजूदा टूल्स का उपयोग कर सकते हैं - फिर से, मुझे विंडोज़ के बारे में कुछ नहीं पता है, आपको जांच करने की आवश्यकता है।

0

मैं हाल ही में एक Win32 आधारित प्रणाली है कि Coff DLLs में डिबगिंग जानकारी को देखा के बारे में पढ़ा: http://www.drizzle.com/~scottb/gdc/fubi-paper.htm

3

पार्सिंग सी, बहुत कठिन की तुलना में यह लग रहा है जब आप खाता विभिन्न बोलियों, पूर्वप्रक्रमक निर्देशों में रखना, पार्सिंग के दौरान प्रकार की जानकारी की आवश्यकता, आदि जो लोग आपको बताते हैं कि "लेक्स और वाईएसी का उपयोग करें" स्पष्ट रूप से उत्पादन सी ​​पार्सर नहीं किया है।

एक उपकरण है जो यह कर सकते हैं हमारे C front end

यह उपरोक्त मुद्दों के सभी के पते है।

पूरा होने पर, इसमें सभी पहचानकर्ताओं और संबंधित प्रकार की जानकारी के साथ एक पूर्ण, नौसैनिक प्रतीक तालिका है। लिस्टिंग वैश्विक और स्थानीय चर इस के साथ तुच्छ होगा।

मैं अर्थात् डिजाइन के पीछे वास्तुकार हूं।

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