2017-07-21 10 views
7

में एक ही फ़ाइल प्रारूप को पार्सिंग और सुंदर प्रिंटिंग, मैं सोच रहा था कि यदि एक मानक फ़ाइल प्रारूप के लिए न केवल एक पार्सर लिखने के लिए हास्केल में एक मानक, कैननिकल तरीका है, बल्कि एक लेखक भी है।हास्केल

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

आप BNFC-मेटा पैकेज धन्यवाद, डोमिनिक

+1

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

+2

यहां Reddit पर कुछ हालिया प्रासंगिक धागे हैं: [1] (https://www.reddit.com/r/haskell/comments/6aqvgj/parser_libraries_with_ast_output/), [2] (https://www.reddit.com/ आर/हैकसेल/टिप्पणियां/66o3lp/i_think_this_is_a_really_stupid_question_inverse /) आईएमओ यह तकनीक अभी भी काफी प्रयोगात्मक प्रतीत होती है। –

+0

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

उत्तर

2

https://hackage.haskell.org/package/BNFC-meta-0.4.0.3

हो सकता है कि आप क्या ढूंढ

"विशेष रूप से, एक अर्ध उद्धृत LBNF व्याकरण दिया है (जैसा कि BNF कनवर्टर द्वारा प्रयोग किया जाता) यह भाषा के लिए एक एलएएलआर पार्सर और सुंदर सुंदर प्रिंटर (टेम्पलेट हास्केल का उपयोग करके) उत्पन्न करता है। "

+0

टिप्पणियों और आपके उत्तर के लिए बहुत बहुत धन्यवाद। यह वास्तव में एक/व्याकरण की अवधारणा है जिसे मैं ढूंढ रहा था। बीएनएफसी-मेटा पैकेज के अलावा, [दूसरा लिंक] (https://www.reddit.com/r/haskell/comments/66o3lp/i_think_this_is_a_really_stupid_question_inverse/) ली-याओ ज़िया के भी दिलचस्प [वाक्यविन्यास] का उल्लेख करता है (https: //hackage.haskell.org/package/syntax) लाइब्रेरी। –