2010-11-07 4 views
8

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

अगर मैं गलत हूं तो मुझे सही करें, लेकिन diff में यह क्षमता नहीं है। मैं उबंटू उपयोगकर्ता हूं। धन्यवाद!

+2

क्या यह होमवर्क चोरी चोरी का पता है? इसके लिए बहुत से पैकेज हैं यदि आप यही चाहते हैं। –

+0

आप इनपुट के प्रारूप को सामान्य करके, फिर diffing द्वारा partway प्राप्त कर सकते हैं। इसके लिए 'इंडेंट' उपयोगिता बहुत बढ़िया है।मैं आपको अपने सिर के ऊपर से विकल्पों की एक सूची नहीं दे सकता, लेकिन यह रिक्त लाइनों को निगल सकता है, ब्रेस प्रारूप और रिक्ति को मानकीकृत कर सकता है, और इसी तरह। परिवर्तनीय नाम बहुत अधिक कठिन होने जा रहे हैं। – Cascabel

+0

मुझे लगता है कि इसका उपयोग उस उद्देश्य के लिए किया जा सकता है, लेकिन मैं वास्तव में दो फाइलों की तुलना करने के लिए इसका उपयोग कर रहा हूं। क्या आप किसी भी चोरी चोरी पहचान उपयोगिता के नाम पोस्ट करना चाहते हैं जिसके साथ आप परिचित हैं? शायद वे मेरी मदद कर सकते हैं। धन्यवाद! –

उत्तर

2

devart (http://www.devart.com/codecompare/benefits.html#cc) से कोडकंपारे नामक एक प्रोग्राम है जिसमें निम्न सुविधा शामिल है (मुझे पता है कि यह बिल्कुल ठीक नहीं है जिसे आपने पूछा था लेकिन शायद इसके लिए इसका उपयोग किया जा सकता है)।

सुविधा "संरचना तुलना" कहा जाता है

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

संरचना तुलना निम्नलिखित भाषाओं के लिए लागू किया जा सकता है:

  • सी #
  • सी ++
  • विजुअल बेसिक
  • जावास्क्रिप्ट

(मैं जानता हूँ कि यह सी को शामिल नहीं करता , लेकिन शायद सी ++ संस्करण के साथ आप समस्या को हल कर सकते हैं)

2

हमारे SD Smart Differencer वही करता है जो आप चाहते हैं। यह आपके द्वारा चुने गए दो फाइलों के लिए स्रोत कोड पढ़ने और एएसटी बनाने के लिए कंपाइलर-गुणवत्ता पार्सर्स का उपयोग करता है। इसके बाद यह सिंटैक्स द्वारा निर्देशित पेड़ों की तुलना करता है, इसलिए यह व्हाइटस्पेस, लेआउट या टिप्पणियों से भ्रमित नहीं होता है। चूंकि यह स्थिरांक के मानों को सामान्यीकृत करता है, यह रेडिक्स के परिवर्तन या आप कैसे बचने के दृश्यों को व्यक्त करते हुए भ्रमित नहीं होते हैं!

प्रोग्रामर इरादे (हटाएं, सम्मिलित करें, प्रतिलिपि, चाल) के संदर्भ में लैंगेज संरचनाओं (चर, अभिव्यक्ति, कथन, घोषणा, कार्य, ...) के स्तर पर डेल्टा रिपोर्ट की गई है, यह निर्धारित करने के साथ कि एक पहचानकर्ता एक बदले गए ब्लॉक में लगातार नाम बदल दिया गया है।

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

यदि आप समझना चाहते हैं कि फाइलों का एक सेट एक दूसरे से कैसे संबंधित है, तो हमारे SD CloneDR फाइलों का एक बहुत बड़ा सेट स्वीकार करेंगे, और आपको बताएंगे कि उनके पास क्या समान है। यह कोड पाता है जो पूरे सेट में कॉपी-पेस्ट-संपादित किया गया है। आपको यह बताना नहीं है कि क्या देखना है; यह स्वचालित रूप से पाता है। एएसटी (उपरोक्त के रूप में) का उपयोग करके, यह व्हाइटस्पेस परिवर्तन या पहचानकर्ताओं के नामों द्वारा बेवकूफ नहीं है। वेबसाइट पर विभिन्न भाषाओं के लिए नमूना क्लोन पहचान रिपोर्ट का एक गुच्छा है।

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