2009-08-23 19 views
14

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

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

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

पीएस: विजुअल स्टूडियो 2010 के सी # संपादक में इस सुविधा में कई छोटी कीड़े हैं। इसे स्वयं लागू करने के बाद, मुझे इसे पॉलिश करने के लिए किए गए कार्यों के लिए एक नया सम्मान है।

संपादित करें (8/25): मुझे लगता है मैं कैसे लगता है कि जब स्मार्ट मांगपत्र एक कोड टिप्पणी के अंदर है चीजों को संभाला जाना चाहिए के लिए write down a draft the rules में कामयाब रहे। मैं शायद नियमों पर सी ++/सी # परिप्रेक्ष्य से काम कर रहा हूं, लेकिन बाद में उन्हें अन्य भाषाओं के पहलुओं के लिए पैरामीटरकृत करने में सक्षम होना चाहिए।

+0

@ क्रिस: दो लिंक के बिना मैंने वापस रखा, आप दो विशेषताओं के दायरे को नहीं बता सकते हैं और मैंने उन्हें कितनी सावधानी से सोचा है। –

+2

हाइपरलिंक के साथ, यह स्पैम imho है। – ChrisW

+0

@ क्रिस: यही कारण है कि मैंने एक को छोड़ दिया, लेकिन दो नहीं जो मेरे ब्लॉग –

उत्तर

1

शायद मुझे कुछ याद आ रहा है, लेकिन "स्मार्ट इंडेंटेशन" पूरी तरह से भाषा के व्याकरण विनिर्देश में बंधेगा। एक अकादमिक पेपर की सबसे नज़दीकी चीज जो मुझे कुछ Google-fu के बाद मिल सकती थी, असल में, किसी विशेष भाषा से संबंधित एक और SO प्रश्न, here

तो, मुझे डर है कि मैं तकनीकी रूप से उत्तर नहीं दे सकता, क्योंकि मुझे कोई अकादमिक कागजात नहीं मिला, लेकिन मेटा-उत्तर के रूप में (दुख की बात है, एक प्रश्न के रूप में): क्या यह कोई है भाषा को पार करने से कठिन है? मैं एक अस्पष्ट computability/जटिलता भावना में "कठिन" शब्द का उपयोग नहीं करता, वास्तविक समय/प्रयास/आंसुओं का जिक्र नहीं करता है, जो वास्तव में डालता है।

विचार करें: मेरे अनुभव में इंडेंटेशन स्तर परिवर्तन, कुछ उप- खंड। यदि बयान, लूप, कक्षाएं, structs इत्यादि। इन सभी को पहले से ही पार्सर द्वारा पता चला है। जैसे ही कोई एक अर्थपूर्ण पेड़ बनाने के लिए एक पार्स पेड़ को सजाने के लिए तैयार कर सकता है (यहां एक यादृच्छिक विश्वविद्यालय website का एक शार्ड है), क्या आप इसके बजाय "इंडेंट जानकारी" के साथ पार्स पेड़ को सजाने नहीं कर सकते?

मुझे लगता है कि मैं सिर्फ यह नहीं देखता कि अकादमिक पत्रों के लिए कॉल क्या है। जब तक, निश्चित रूप से, मुझे कुछ याद आ रहा है। जो काफी संभव है, क्योंकि मैंने निश्चित रूप से इस प्रयास का साहस नहीं किया है। :) लेकिन, मेरे सुविधाजनक बिंदु से, ऐसा लगता है कि यह स्मार्ट इंडेंटिंग केवल एक संशोधित पार्सर चलाकर संभव है, और "पार्स त्रुटियों" की रिपोर्ट करने के बजाय, यह स्वचालित रूप से कोड को दोबारा सुधारता है ताकि यह मान्य हो (मान लीजिए कि "असली "पार्सर ब्लॉक पहले से ही ठीक है)।रीयल-टाइम रनिंग निश्चित रूप से मुद्दों का कारण बनती है, और व्हाइटस्पेस-निर्भर भाषा में इंडेंटेशन के अस्पष्ट स्तर हैं (क्योंकि इंडेंट लेवल ब्लॉक के अंत है)।

अंतिम के रूप में (ईमानदारी से, मैं लगभग पूरा कर चुका हूं! :)) नोट: मेरे अनुभव में Emacs टेक्स्ट एडिटोरी चौंकाने वाला अच्छा है। मुझे नहीं पता कि यह कैसे काम करता है, लेकिन अगर मैं इसे आजमा देना चाहता हूं, तो यह पहला स्थान होगा जो मैं देखता हूं ... निश्चित रूप से, एसओ के बाद। :))

+3

मैंने सवाल को कभी-कभी थोड़ा (या बहुत) बदल दिया। मुझे परेशानियों को रोकने के लिए एक परीक्षण प्रक्रिया बनाने में एक बड़ा समय हो रहा है जबकि मैं अजीब बग ठीक करता हूं। यह पार्सिंग से काफी कठिन है क्योंकि 1) गति मायने रखता है * बड़ा समय * और 2) जब स्मार्ट इंडेंट का आह्वान किया जाता है तो दस्तावेज लगभग सिंटैक्टिक रूप से सही नहीं होता है। "दस्तावेज़ के लिए –

+0

+1 लगभग कभी भी वाक्य रचनात्मक रूप से सही नहीं है"। यह वास्तव में इसे कठिन बनाता है। त्रुटि सुधार के साथ पार्स करके आप अभी भी अच्छा कर सकते हैं; कम से कम लागत की मरम्मत आपको बताती है कि वहां क्या होना चाहिए था, और फिर आप एक साफ पेड़ को सुंदर बनाने के लिए समस्या को कम कर सकते हैं। –

5

Emacs सीसी मोड मैनुअल: Indentation Engine Basics

स्टीव येग ब्लॉग ब्लॉग: js2-mode: a new JavaScript mode for Emacs। उत्तरार्द्ध से

उद्धरण: "आश्चर्यजनक आश्चर्यजनक रूप से, इसके अनुसार, खरोज समस्या लगभग पूरी तरह से ओर्थोगोनल पार्स और वाक्य रचना सत्यापन करने के लिए है।"

+0

स्टीव का ब्लॉग पूरी तरह से समझ में आता है। मैं पूरी तरह से समझता हूं कि वह कहां से आ रहा है। एक बात ध्यान में रखना: उनके ब्लॉग पोस्ट में ऐसे मामलों में से एक टन गुम है, जिन पर विचार किया जाना चाहिए, लेकिन यह सबसे अधिक संभावना है क्योंकि सूची में बहुत सारे हैं। –

+0

ठीक है मैं हो जाऊंगा। मेरा एकमात्र सांत्वना यह है कि स्टीव भी मानते हैं कि यह जानकर आश्चर्य की बात है कि समस्या पार्सिंग के लिए अठारह है। :) +1 – agorenst

+0

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

3

जो जादू खोज वाक्यांश आप खोज रहे हैं वह "pretty print" हो सकता है।

+1

आमेन। +1 (बस मुझे यह कहना है कि मैंने आपको एक बिंदु दिया है)। –

1

एक अन्य उत्तरदाता की तरह, इस अधिकार को करने का मुख्य विचार सुंदर प्रिंटिंग है, जो कोड की सार वाक्यविन्यास संरचना से टेक्स्ट उत्पन्न करता है।

असल में आप मुद्रित पाठ के घोंसले का उत्पादन करने के लिए पेड़ के घोंसले का लाभ उठाते हैं। मुख्य विचार पेड़ की पत्तियों से आदिम तारों का निर्माण करने की धारणा हैं, क्षैतिज बक्से को प्राप्त करने के लिए क्षैतिज संरचना प्रदान करने के लिए क्षैतिज संरचना, और ग्लूइंग बक्से को एक दूसरे के ऊपर ग्लूइंग बक्से प्रदान करने के लिए क्षैतिज बक्से [पाठ के आयतों] को एक साथ जोड़ते हैं।

ट्रिकी भागों: (? अभी कितने अग्रणी शून्य किया द्विआधारी नाव बिंदु संख्या है) पेड़ के पत्तों से जानकारी स्वरूपण के साथ भाषा के शाब्दिक पुनः, विकल्प बॉक्स लेआउट और बैक ट्रैकिंग, और पैटर्न मिलान की अनुमति देकर सही मार्जिन अतिप्रवाह से निपटने जटिल वृक्ष संरचना अच्छा मायनों में खास पेड़ (जैसे, नेस्टेड अगर-तो-अगर-से-अगर ....) prettyprint को

यहाँ a research paper विषय (Full text PDF) पर है।

DMS Software Reengineering Toolkit के साथ बड़े पैमाने पर मेटाप्रोग्रामिंग द्वारा उत्पन्न सुंदर प्रिंट एएसटी के लिए है।

+0

+1 वह कागज़ सामान्यीकृत स्मार्ट इंडेंट व्यवहार को दस्तावेज करने के लिए निश्चित रूप से सहायक होगा। मुझे विश्वास है कि आप किसी भी * सामान्य पार्सिंग एल्गोरिदम को स्मार्ट इंडेंट से संबंधित कठिनाई को बहुत कम समझ रहे हैं। –

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