फॉरवर्ड-सेक्‍सप्‍प्‍ट ब्‍लॉग को कीवर्ड द्वारा परिभाषित ब्‍लॉक बनाएं, न कि केवल कोष्ठक


10

एक भाषा (जूलिया) कि ब्लॉक ऐसे कीवर्ड्स द्वारा परिभाषित किया गया है में for..end, begin..endके साथ-साथ कोष्ठक, एक अच्छा तरीका है इस तरह के एक ब्लॉक से अधिक छोड़ क्या है? इसके अलावा, endन केवल एक ब्लॉक कीवर्ड है, बल्कि अन्य स्थानों में उपयोग किया जाने वाला एक वैध पहचानकर्ता भी है।

एक तरीका ब्लॉक-स्टार्टिंग / क्लोजिंग रेगेक्स को देखना है, और सभी स्ट्रिंग्स, टिप्पणियों और endएस आदि को छोड़ना है , लेकिन यह कुछ हद तक अक्षम है, और थोड़ा बदसूरत है।

क्या Emacs के अपने सिंटैक्स parsing को ऐसे ब्लॉक कीवर्ड्स को पहचानने का एक तरीका है, जिससे यह forward/backward-sexpस्वचालित रूप से काम करेगा, और ताकि कोई जल्दी से वर्तमान ब्लॉक की शुरुआत को आउटपुट के उदाहरण से बता सके, जैसे syntax-ppss?

[नोट: मैं खुद फ़ाइल को पार्स करने में कोई आपत्ति नहीं करता, लेकिन उस स्थिति में मैं अभी भी यह जानना चाहूंगा कि मेरे पार्सर को बाकी ईमैक्स में कैसे प्लग किया जाना चाहिए।]


1
आप एक नज़र डाल सकते हैं ruby-modeजो माणिक के लिए कुछ समान करता है। एक अन्य विकल्प स्मार्टप्रेन में हुक करना है , इसमें रूबी मोड के लिए एक विशेष कॉन्फ़िगरेशन है जिसे आप एक प्रारंभिक बिंदु के रूप में उपयोग कर सकते हैं
इकबाल अंसारी

जवाबों:


9

आप अंतर्निहित लाइब्रेरी SMIE (सिंपल- माइंडेड इंडेंटेशन इंजन के लिए खड़ा है) पर एक नज़र डाल सकते हैं । नाम के बावजूद, इंडेंटेशन केवल उन सुविधाओं में से एक है जो इसे प्रदान करता है। यह कई तरीकों द्वारा उपयोग की जाने वाली विधि है (सहित ruby-mode, एक टिप्पणी में वर्णित), सेक्सप मूवमेंट और इंडेंटेशन प्रदान करने के लिए।

किसी भाषा के लिए SMIE को नियुक्त करना मोटे तौर पर दो चरणों वाला काम है:

  • अपनी भाषा के लिए व्याकरण को परिभाषित करें, साथ में एक लिकर टोकन की पहचान;
  • इंडेंटेशन नियमों को परिभाषित करें।

आपके उद्देश्य के लिए, केवल पहले चरण की आवश्यकता होगी!

कुल मिलाकर, इस तरह से परिभाषित पार्सर अच्छी तरह से emacs में प्लग। उदाहरण के लिए, show-parensSMIE व्याकरण (कम से कम हाल के पर्याप्त संस्करणों में कम से कम) में परिभाषित पर-जैसी अभिव्यक्तियों को उजागर करेगा।

ध्यान दें कि आप अभी भी syntax-ppssसंलग्न वातावरण के बारे में जानकारी प्राप्त करने के लिए उपयोग नहीं कर पाएंगे , क्योंकि यह केवल आपको सिंटैक्स-टेबल पार्सर का परिणाम देगा। लेकिन सेक्सप मूवमेंट फंक्शन (उदाहरण के लिए up-listइसके बाद backward-sexp) एक रिप्लेसमेंट हो सकता है।


2

मैं एक बना पुस्तकालय इस के लिए

एक बार परिभाषित करने के बाद, आदेशों का एक गुच्छा उपलब्ध है, आगे की ओर, पीछे, कॉपी आदि।

परिभाषित करना - छद्म कोड--:

(put 'MY-FORM 'beginning-op-at
           (lambda () MY-FORWARD-MOVE-CODE))

(put 'MY-FORM 'end-op-at
     (lambda () MY-BACKWARD-MOVE-CODE))

जब किया, यह उपलब्ध होना चाहिए, यानी नकल की और इस तरह से लौटा

(defun MY-FORM-atpt (&optional arg)
  " "
  (interactive "p")
  (ar-th 'MY-FORM arg))
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.