types - Haskell lexer problems -
मैं haskell में एक lexer लिख रहा हूँ यहां कोड है:
lexer :: स्ट्रिंग - & gt; [टोकन] लेक्सर एस | S = ~ whitespace :: bool = टोकन = s = ~ whitespace :: स्ट्रिंग में लेक्स (ड्रॉप (लंबाई टोकन) s) | S = ~ number :: bool = टोकन = s = ~ number :: वाल में स्ट्रिंग (टोकन पढ़ें): लेक्स (ड्रॉप (लंबाई टोकन) s) | S = ~ operator :: Bool = टोकन = s = ~ ऑपरेटर: ऑपरेशन टोकन में स्ट्रिंग: लेक्स (ड्रॉप (लंबाई टोकन) s) | अन्यथा = त्रुटि "अपरिचित वर्ण" जहां सफेद स्थान = "^ [\ t \ n]" संख्या = "^ [0- 9] * (\ [0- 9] +)?" ऑपरेटर = "^ [+ - * / ()]" डेटा टोकन = वैल इन्ट | ऑपर स्ट्रिंग
मेरी दो समस्याएं हैं I एक, संख्या regex "^ [0-9] * (\ [0-9] +)?"
इस त्रुटि को फेंकता है:
स्ट्रिंग / चरित्र में शाब्दिक त्रुटि शब्दशः चरित्र '[' <'' पर
और जब मैं इसे युक्त रेखा और उस फ़ंक्शन का हिस्सा टिप्पणी करता हूं जिसका उपयोग करता है, तो मुझे यह त्रुटि मिलती है:
अपेक्षित प्रकार से मिलान नहीं किया जा सका ' अनुमानित प्रकार: [टोकन] अनुमानित प्रकार: [(स्ट्रिंग, स्ट्रिंग)] अभिव्यक्ति में: लेक्स (ड्रॉप (लंबाई टोकन) s) अभिव्यक्ति में: टोकन = s = ~ सफेद स्थान :: स्ट्रिंग में लेक्स (ड्रॉप (टोन टोकन) s)
मुझे नहीं पता है कि मैं इन त्रुटियों में से क्यों मिल रहा हूं क्या कोई मेरी मदद कर सकता है
बैकस्लैश स्ट्रिंग लीटरल में एस्केप वर्णों के रूप में उपयोग किया जाता है, जैसे " \ N "
एक स्ट्रिंग के लिए जिसमें एक न्यूलाइन है यदि आप एक शाब्दिक बैकस्लैश चाहते हैं तो आपको उसे "\\"
के रूप में भागने की आवश्यकता है। Regex "^ [0-9] * (\ [0- 9] +) में समस्या है?"
, हास्केल पार्सर "\। \" की व्याख्या करने की कोशिश करता है।
एक सामान्य स्ट्रिंग के रूप में बचने और उस पर चुसे (शायद क्योंकि ऐसा कोई बच नहीं है) यदि आप regex को "^ [0-9] * (\\। [0-9] +) के रूप में लिखते हैं?"
त्रुटि दूर हो जाती है।
इसका कारण प्रकार की समस्या यह है कि आप लेक्स (ड्रॉप (लंबाई टोकन) में मानक प्रस्ताव से कॉल करते हैं)
, जिस प्रकार का स्ट्रिंग - & gt; [(स्ट्रिंग, स्ट्रिंग)]
। शायद आप अपने स्वयं के फ़ंक्शन lexer
के बजाय एक पुनरावर्ती कॉल करना चाहते हैं ...
Comments
Post a Comment