पाठक को संशोधित करने से नए रीड-सिंटैक्स (जैसे कि #(hash table)
और '(quoted)
) शुरू करने की अनुमति होगी । कई लिस्प्स में यह क्षमता होती है, लेकिन ऐसी कोई सुविधा मौजूद नहीं है।
पाठक को संशोधित करने से नए रीड-सिंटैक्स (जैसे कि #(hash table)
और '(quoted)
) शुरू करने की अनुमति होगी । कई लिस्प्स में यह क्षमता होती है, लेकिन ऐसी कोई सुविधा मौजूद नहीं है।
जवाबों:
पता चला है कि मैनुअल का मतलब है कि आप वास्तव में रीडर मैक्रोज़ नहीं कर सकते।
परिशिष्ट C पोर्टिंग कॉमन लिस्प के अनुसार :
पाठक मैक्रों। आम लिस्प में एक दूसरे प्रकार का मैक्रो शामिल है जो व्यक्तिगत पात्रों के स्तर पर काम करता है। उदाहरण के लिए, कॉमन लिस्प एक पाठक मैक्रो नामक उद्धरण संकेतन को लागू करता है, जबकि Emacs Lisp का पार्सर सिर्फ उद्धरण को एक विशेष मामले के रूप में मानता है। कुछ लिस्प पैकेज अपने लिए विशेष वाक्यविन्यास बनाने के लिए रीडर मैक्रोज़ का उपयोग करते हैं, जो एमएसीएस पार्सर पढ़ने में असमर्थ है।
syntax.c
भी आवश्यकता होगी ...
जाहिरा तौर पर यह किया जा सकता है, लेकिन बहुत काम के लिए तैयार करें। (या नहीं, क्योंकि मैं इसे कुछ सप्ताहांत से निपटने वाला हूं; ;-)
(defvar *orig-read* (symbol-function 'read))
(defun read (&optional in)
(message "reading from %s" load-file-name)
(funcall *orig-read* in))
(setq load-read-function (symbol-function 'read))
अब "सभी" जो करना बाकी है, वह एक पूर्ण लिस्प पाठक को लागू करना है जो एलिसा करता है और जो आप अधिक चाहते हैं वह सब कुछ का समर्थन करता है। मुझे लगता है कि यह defpackage
एक उदाहरण के रूप में सीएल-जैसे और पैकेज आंतरिक प्रतीकों को प्रदान करने के लिए इस्तेमाल किया जा सकता है । इसके अलावा, regexps के लिए एक विशेष वाक्यविन्यास कुछ ऐसा है जो मैं बुरी तरह से करना चाहता हूं (या अधिक सटीक रूप से, कुछ स्ट्रिंग सिंटैक्स जो बैकस्लैश की व्याख्या नहीं करता है)।
संपादित करें: यहाँ एक प्रूफ-ऑफ-कॉन्सेप्ट कार्यान्वयन है: https://github.com/mishoo/elisp-reader.el