2011-12-12 11 views
7

क्या कोई ओपन सोर्स जावा एपीआई है जो जावा स्रोत कोड के दो सार सिंटेक्स पेड़ की तुलना करने की अनुमति देता है?एपीआई?

मैं दो वाक्यविन्यास पेड़ों के बीच अंतर देखना चाहता हूं, यह अलग-अलग उपकरणों में कैसे किया जाता है।

उत्तर

6

अधिकांश diff उपकरण, लाइनों की तुलना नहीं वाक्य रचना के पेड़ (Wikipedia article for discussion देखें)।

कुछ techical कागजात कि कैसे वाक्य रचना पेड़ करने के लिए के बारे में बात कर रहे हैं तुलना, उदाहरण के लिए, Diff/TS: A Tool for Fine-Grained Structural Change Analysis

पेड़ मतभेद उपलब्ध कंप्यूटिंग कहीं भी रूप में तक मुझे पता है के लिए कोई एपीआई रहे हैं। यदि आप न्यूनतम अंतर प्राप्त करना चाहते हैं, तो समस्या पहले की तुलना में अधिक जटिल है। लेकिन मूल तकनीक Levenstein distance metrics के कुछ बदलाव का उपयोग करना है।

हमें SmartDifferencers की हमारी लाइन के लिए अपना खुद का रोल करना पड़ा; सौभाग्य से, हमारे पास सटीक एएसटी उत्पन्न करने के लिए कई लैंगुगों के लिए वास्तव में अच्छा मोर्चा है।

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

2

मुझे आश्चर्य है कि अगर वहाँ एक ANTLR विस्तार कहीं कि यह कर सकते हैं है ....

http://www.antlr.org/

http://openjdk.java.net/projects/compiler-grammar/antlrworks/Java.g

+2

यह के रूप में प्राप्त करने के लिए आसान है: https://bitbucket.org/sealuzh/tools-changedistiller/wiki/Home

CodingSpectator (ast diffing कोड के बाकी हिस्सों में hardcoded है) स्रोत फ़ाइलों के टी, यह उनके बीच समानताओं को खोजने के लिए एक और कहानी है :)। यहां स्थानीय पार्सिंग गुरुों पर स्टैक ओवरफ्लो, [ईरा बैक्सटर] (http://stackoverflow.com/users/120163/ira-baxter) पर, इस बारे में एक [Google टेक टॉक] (http://www.youtube) में बात करता है .com/watch? v = c-_dw9iEzhA) जहां उन्होंने उल्लेख किया कि उनका सॉफ़्टवेयर ऐसा करता है। –

+0

बहुत सच - यह निर्भर करता है कि आप 'तुलना' करने के लिए क्या मतलब रखते हैं। शायद यह परिभाषित करना बेहतर होगा, एएसटी उपयोग करने के लिए सबसे अच्छी बात नहीं हो सकती है। –

6

हाँ, वहाँ मुक्त कार्यान्वयन कि उत्पादन पेड़ डिफ हैं:

gumtree (तेज, मल्टी Languague, Git के साथ एकीकृत): http://www.labri.fr/perso/falleri/perso/tools/gumtree/ https://github.com/jrfaller/gumtree

ChangeDistiller (काफी परिपक्व, एक आत्म निहित पुस्तकालय के रूप में बनाया गया) : https://github.com/vazexqi/CodingSpectator/tree/codingtracker-ast-inference

+0

यह भी देखें https://github.com/SpoonLabs/gumtree-spoon-ast-diff –