2008-11-12 15 views
8

क्या आत्मा (बूस्ट सी ++ लाइब्रेरी का हिस्सा) धारा से आने वाले बाइनरी डेटा को पार्स करने के लिए उपयोग किया जा सकता है? उदाहरण के लिए, क्या इसका उपयोग किसी सॉकेट से संरचनाओं, बाइट्स और व्यक्तिगत बिट झंडे में आने वाले डेटा को पार्स करने के लिए किया जा सकता है? धन्यवाद!आत्मा को बूस्ट स्ट्रीम डेटा को पार्स करने के लिए इस्तेमाल किया जा सकता है?

+1

क्या आप डेटा के प्रारूप पर अधिक जानकारी दे सकते हैं। क्या यह कुछ जटिल प्रारूप है? –

+0

मुझे यह याद नहीं आया कि जब मैंने मूल रूप से यह पूछा था, लेकिन मुझे शायद एसएसएल/टीएलएस हेडर को पहचानने के साथ क्या करना पड़ा था। – Brian

उत्तर

12

बूस्ट स्पिरिट template meta-programming के साथ Extended Backus–Naur Form (EBNF) सिंटैक्स का उपयोग करके एक पार्सर को परिभाषित करने की अनुमति देता है। यह बहुत लचीला है और पार्सिंग प्रक्रिया के सभी चरणों में अमूर्त कक्षाओं का उपयोग करता है जिसे अनुकूलित किया जा सकता है। बाइनरी डेटा स्ट्रीम को संसाधित करने के लिए, आपको कस्टम स्कैनर कक्षाओं को लागू करने की आवश्यकता होगी क्योंकि डिफ़ॉल्ट प्रकार टेक्स्ट इनपुट के लिए तैयार किए जाते हैं। आप Spirit User's Guide के The Scanner and Parsing अनुभाग में और पढ़ सकते हैं।

मेरी विनम्र राय में, बाइनरी डेटा धाराओं को हाथ से चलने वाले क्रमबद्ध कोड के साथ सबसे अच्छा तरीके से संभाला जाता है। आत्मा को अच्छी तरह से गठित व्याकरण जैसे मार्क-अप या स्क्रिप्टिंग भाषाओं की दिशा में अधिक तैयार किया जाता है। उदाहरण के लिए, The Complete Syntax of Lua ईबीएनएफ में प्रदान किया जाता है। तो, एक कस्टम पार्सर बनाने के लिए आत्मा का उपयोग करना समझ में आता है। दूसरी तरफ, सिंक्रनाइज़ेशन बाइट्स और सीआरसी ब्रैकेटिंग संदेशों के साथ एक मालिकाना सीरियल डेटा लिंक को ईबीएनएफ को परिभाषित करने के लिए बहुत अधिक काम की आवश्यकता होगी यदि context-free grammar इसके लिए भी मौजूद है।

परिशिष्ट

The latest version of Boost Spirit includes functionality for dealing with binary data.

9

Spirit2, बस जारी की है, द्विआधारी पार्स करने के लिए सुविधा नहीं है। Check out this

+0

बहुत अच्छा, धन्यवाद! – Brian

संबंधित मुद्दे

 संबंधित मुद्दे