2011-10-19 13 views
6

मुझे स्कैला से दूसरी भाषा में कनवर्टर बनाने की आवश्यकता है। मैं स्कैला कोड पार्सर की तलाश में हूं जो संकलन के बिना कोड को सिंटैक्स पेड़ में परिवर्तित करता है।स्कैला कोड पार्सर (कंपाइलर नहीं)

उत्तर

14

मुझे इसे सरल बनाने दें: स्कैला प्रोग्राम के एएसटी को अकेले पार्सर के साथ उत्पन्न करने का कोई तरीका नहीं है। टाइपर चलाने के लिए बिल्कुल जरूरी है, और इसका मतलब है कि अनुमान और निहितार्थ टाइप करें।

उसके बाद, आप जो भी चाहें कर सकते हैं। लेकिन कंपाइलर के इन पहले कुछ चरणों (टाइमर की गिनती, हाल के संस्करणों में चार) आवश्यक हैं।

संयोग से, यह चरण presentation compiler द्वारा चलाया गया है, जिसका उपयोग Scala IDE for Eclipse द्वारा किया जाता है। ऐसा लगता है कि यह आपके लिए एकदम सही इंटरफ़ेस हो सकता है।

ENSIME भी uses it है, जो इसके बारे में जानकारी का सबसे अच्छा स्रोत हो रहा है, और आप भी, क्योंकि यह रूप में अच्छी तरह संकलक के एएसटी उपयोग करता है, Scala Refactoring उपकरण पर एक नज़र लेने के लिए चाहते हो सकता है।

अंत में, आप टाइपर के बाद पेड़ देखने के लिए -Ybrowse:typer के साथ कोड को संकलित करने का प्रयास कर सकते हैं। मौजूदा चरणों को प्रदर्शित करने के लिए -Xshow-phases का उपयोग करें, या -Xprint:typer टाइपर (या किसी अन्य चरण) के बाद "स्रोत" मुद्रित करने के लिए।

+1

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

+1

@Ira यह मानता है कि भाषा को व्याकरण के साथ _parsed_ किया जा सकता है। पर्ल, उदाहरण के लिए, [नहीं कर सकते] (http://www.perlmonks.org/?node_id=663393)। स्कैला पर, जूरी अभी भी बाहर है - कुछ लोगों ने ईबीएनएफ विनिर्देशों के आधार पर एक पार्सर बनाने की कोशिश की है, लेकिन पता चला है कि यह काफी काम नहीं करता है। हो सकता है कि स्काला को व्याकरण से पार्स किया जा सके, लेकिन, व्यावहारिक रूप से, इस तरह के किसी भी पार्सिंग बिना टाइपर के _useless_ होगा, क्योंकि स्रोत कोड का हिस्सा उस चरण द्वारा स्पष्ट रूप से प्रदान किया जाता है। –

+0

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

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