2010-05-19 14 views
7

मुझे अभी एक नया असाइनमेंट दिया गया है जो ऐसा लगता है कि यह एक दिलचस्प चुनौती होगी।नई भाषा के लिए स्टेटिक कोड विश्लेषण। कहा से शुरुवात करे?

ग्राहक अपने आंतरिक (जल्द ही खुले सोर्स किए गए) प्रोग्रामिंग भाषा के लिए विकसित होने के लिए कोड स्टाइल चेकिंग टूल चाहते हैं जो JVM पर चलता है। भाषा वाक्यविन्यास बहुत जावा जैसा है।

ग्राहक मूल रूप से मुझे checkstyle जैसे कुछ उत्पादन करना चाहता है।

तो मेरा सवाल यह है कि आप इस समस्या से कैसे संपर्क करेंगे? एक स्वच्छ स्लेट को देखते हुए आप ग्राहक को क्या सिफारिशें करेंगे?

मुझे लगता है कि मैं 3 विकल्प

  1. खरोंच से कुछ लिखें है। आईडी ऐसा नहीं करना पसंद करता है क्योंकि ऐसा लगता है कि इस तरह के कोड विश्लेषण उपकरण समस्या को हल किया गया है ताकि कई बार "ढांचा" या "प्लेटफार्म" उन्मुख दृष्टिकोण होना चाहिए।

  2. कांटा एक मौजूदा कोड शैली जाँच उपकरण और पार्स इस नई भाषा आदि आदि

  3. बढ़ाएँ या एक मौजूदा स्थिर कोड विश्लेषण उपकरण में प्लग के साथ फिट करने के लिए संशोधित। (हो सकता है Yasca के लिए एक प्लगइन लिखना?)

उत्तर

4

इस तरह के उपकरण पर एक नजर डालें मूल रूप से भाषा का कम से कम एक सबसेट के लिए एक संकलक सामने के अंत को लागू करने की है। सबसे आसान प्रारंभिक बिंदु अक्सर एक मौजूदा कंपाइलर फ्रंट-एंड को अनुकूलित करने के लिए होता है, इसलिए आपको निश्चित रूप से अपने ग्राहक के कंपाइलर को देखकर शुरू करना चाहिए। यदि आप भाग्यशाली हैं तो इसका फ्रंट एंड एंड बैक-एंड के बीच एक साफ अलगाव होगा और एएसटी का उपयोग करने में सक्षम होगा और जो भी आईआर फ्रंट-एंड आपके अतिरिक्त विश्लेषण करने के लिए तैयार होगा।

+0

हाँ, या यदि यह संभव नहीं है तो एक पार्सर जेनरेटर का उपयोग करें। –

0
+0

हाँ, फाइंडबग, पीएमडी चेकस्टाइल इत्यादि दस्तावेज़ बताते हैं कि इसका विस्तार सक्षम है, लेकिन ऐसा लगता है कि सभी जादू बाइट-कोड स्तर पर किए जाते हैं। तो बॉक्स से बाहर यह जेनरेट बाइट कोड में मुद्दों का पता लगा सकता है लेकिन फिर इन त्रुटियों को इस नई भाषा के स्रोत कोड में मैप करना मुश्किल हो सकता है। – tinny

1

आप यह सब सामान स्क्रैच से नहीं लिखना चाहते हैं।

DMS Software Reengineeering Toolkit देखें। इसने पार्सिंग के लिए कंपाइलर मशीनरी को सामान्यीकृत किया है, एएसटी का निर्माण किया है, प्रतीक तालिकाओं का निर्माण, नियंत्रण प्रवाह/डेटा प्रवाह ग्राफ और कॉल पेड़ का निर्माण/ट्रैवर्सिंग किया है।

डीएमएस को एक पूर्ण जावा फ्रंट एंड के साथ प्राप्त किया जा सकता है जो एएसटी, प्रतीक तालिकाओं और प्रवाह विश्लेषण का निर्माण करता है। डीएमएस एपलबॉम्ब के साथ भाषा बोलियों को संभालता है, इसलिए यह आपके ग्राहक की जावा-वेरिएंट भाषा से मेल खाने के लिए इस फ्रंट एंड को संशोधित करने के लिए व्यावहारिक के रूप में सरल होना चाहिए और फिर भी यह सभी विश्लेषण मशीनरी हासिल करना चाहिए।

0

पीएमडी के बारे में क्या? मैंने वर्षों से पीएमडी का इस्तेमाल किया लेकिन पहले कभी भी अपने भीतर के कामकाज में कभी भी ड्रिल नहीं किया।

पीएमडी को एक कस्टम भाषा पार्सर लिखकर बढ़ाया जा सकता है, जो कक्षा पथ पर एक जार के भीतर निम्नलिखित कार्यान्वयन प्रदान करके किया जाता है।

net.sourceforge.pmd.cpd.Language
net.sourceforge.pmd.cpd.Tokenizer

http://pmd.sourceforge.net/cpd-parser-howto.html

फिर PMD rule designer का उपयोग करके मैं जिसके परिणामस्वरूप एएसटी से नियमों को परिभाषित कर सकते हैं।

पीएमडी के बारे में मुझे जो चीज पसंद है वह यह है कि जावा स्पेस में इसका व्यापक रूप से मान्यता प्राप्त कोड विश्लेषण टूल है, इसलिए इसमें बहुत से तृतीय पक्ष का समर्थन है। E.g ग्रहण प्लगइन, हडसन सीआई प्लगइन इत्यादि

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