9

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

लेकिन यह विशेषता भाषा विनिर्देश में निर्दिष्ट कहां है? एक अनुरूप कार्यान्वयन की तलाश करते समय मैं इस सुविधा का उल्लेख कैसे करूं? (और जो हास्केल अनुकरण वास्तव में यूनिकोड पहचानकर्ताओं का समर्थन करने के लिए जाने जाते हैं?)

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

(बीटीडब्ल्यू, मैंने इस प्रश्न पर एक "वाक्यविन्यास" टैग रखा है, लेकिन मुझे वास्तव में यह भाषा के सिंटैक्स की तुलना में कम स्तर के लेक्सिंग के स्तर का मुद्दा माना जाता है। क्या यहां एक टेक्स्ट लेक्सिंग स्तर की सुविधाओं के लिए एक टैग है भाषा, सिंटैक्स विनिर्देशन की विशेषताओं के बजाय भाषा?)

+0

अंतिम अनुच्छेद के लिए: यह वाक्यविन्यास का हिस्सा है। यह संभवतः व्याकरण का हिस्सा नहीं है, लेकिन टोकननाइजेशन और पार्सिंग के बीच भेद केवल अभ्यास में मौजूद है। और वहां सिस्टम हैं (उदा। पार्सिंग एक्सप्रेशन ग्रामर) जो टोकननाइज़ेशन चरण छोड़ते हैं और वास्तविक स्रोत कोड को पूरा करते हैं। – delnan

+1

मेरे प्रयोगों का विवरण: ghc-6.10.4- [alt2] (http://prometheus.altlinux.org/en/5.1/srpms/ghc) (आईआईआरसी) ने यूनिकोड पहचानकर्ताओं को स्वीकार नहीं किया, ghc-6.12.3- alt4 और ghc-7.0.1- [alt1] (http://prometheus.altlinux.org/en/Sisyphus/srpms/ghc) यूनिकोड पहचानकर्ताओं को अनुमति देता है, और hugs98-20060921- [alt5] (http: //prometheus.altlinux .org/en/5.1/srpms/hugs98) यूनिकोड पहचानकर्ताओं को अनुमति नहीं देता है (जो दुर्भाग्यपूर्ण है, क्योंकि मैंने सोचा था कि यह अधिक जटिलता, यानी शायद सरल त्रुटि संदेशों के कारण ghc की तुलना में शिक्षा के लिए बेहतर हो सकता है)। –

+0

यूनिकोड आईडी के साथ अधिक संबंधित प्रयोग: आह, और मैंने करी-0.9.11 को भी एक प्रयास दिया (क्योंकि मैं करी "एक्सटेंशन" के साथ कुछ कोड दिखाना चाहता हूं): यह मुएनस्टर करी कंपाइलर ने यूनिकोड पहचानकर्ताओं (आईआईआरसी) की अनुमति नहीं दी । –

उत्तर

10

Online ReportLexemes के तहत यह दस्तावेज। यह भी शुरुआती नोट करता है कि "हास्केल यूनिकोड चरित्र सेट का उपयोग करता है। हालांकि, स्रोत प्रोग्राम वर्तमान में एएससीआईआई चरित्र सेट की ओर अग्रसर हैं जो हास्केल के पुराने संस्करणों में उपयोग किए जाते हैं।"

वास्तविक संकलक यूनिकोड पहचानकर्ताओं का समर्थन कर सकते हैं या नहीं भी कर सकते हैं। जीएचसी करता है, लेकिन आपको यह ध्यान रखना होगा कि यूनिकोड कोडपॉइंट्स को एएससीआईआई अक्षरों के समान नियमों का पालन करना होगा: प्रकार को कोडपॉइंट के साथ शुरू करना चाहिए जिसे अपरकेस या टाइटलकेस के रूप में वर्गीकृत किया गया है, लोअरकेस के रूप में चर (हालांकि वास्तव में यह वर्णमाला के लिए आराम से है और नहीं अपरकेस/टाइटलकेस; भाषा समिति से स्पष्टीकरण मांगने के लायक हो सकता है), ऑपरेटरों को विराम चिह्न या प्रतीक होना चाहिए। (इसका मतलब यह है कि आप अरबी में प्रकारों की घोषणा नहीं कर सकते हैं, उदाहरण के लिए, जब तक कि आप उन्हें किसी अन्य स्क्रिप्ट में किसी वर्ण के साथ उपसर्ग नहीं करते हैं जो कि अपरकेस/टाइटलकेस है।)

यूनिकोड समर्थन जानकारी एकत्र करने के लिए: जबकि मैं नहीं करता Haskell Wiki पर "unicode" पर खोज करने वाले एक पृष्ठ के बारे में जानें, कई हास्केल कंपाइलर्स में यूनिकोड समर्थन के बारे में जानकारी पाती है।

+0

लिंक के साथ इस तरह के एक त्वरित और विस्तृत जवाब के लिए धन्यवाद! –

+3

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