इसलिए पहिया को फिर से शुरू करने के लिए, मैं जानना चाहता हूं कि संदर्भ-मुक्त भाषा (जैसे yacc, आदि द्वारा उत्पादित) से यादृच्छिक बयान उत्पन्न करने के बारे में क्या किया जा चुका है। ये व्याकरण प्राथमिक रूप से पार्सिंग के लिए हैं, लेकिन शायद किसी ने पार्सर्स का परीक्षण करने के लिए कुछ पीढ़ी की है? धन्यवादसंदर्भ मुक्त व्याकरण से एन कथन उत्पन्न करना
उत्तर
this blog post देखें। असल में, यह प्रत्येक नियम आवेदन पर चुने गए आरएचएस को यादृच्छिक बनाता है।
एक प्राचीन लेकिन अभी भी दिलचस्प लेख here पता चलता है कि तुम क्यों यादृच्छिक वाक्य के प्रभावी पीढ़ी के लिए कुछ और कमी की जरूरत की तुलना में आप पार्सिंग के लिए करना है - यह भी उन अतिरिक्त बाधाओं को उपलब्ध कराने की एक आसान तरीका पता चलता है और एक देता है पूरा उदाहरण कार्यक्रम (... फोरट्रान चतुर्थ में ... लेकिन, हे, यह 40 साल से अधिक है ...! -)।
दुर्भाग्यवश मुझे इस विषय पर किसी भी हालिया काम (या अधिक आधुनिक भाषाओं में कार्यान्वयन) के बारे में पता नहीं है - लेकिन जो भी भाषा आपको सबसे अच्छी पसंद है, उसे फोरट्रान डस्टी डेक ट्रांसकोड करना इन अवधारणाओं के साथ आने जैसा कठिन नहीं होना चाहिए अपने आप पर ;-) - यह केवल पहले से ही प्राचीन चीजों की तरह है जो मैंने कॉलेज में होने पर वास्तविक पेपर-आधारित पुस्तकालयों में वापस देखा था, और मुझे आश्चर्य है कि एसीएम की ऑनलाइन खोज सुविधाओं ने मुझे संदर्भ का पता लगाने की अनुमति दी मैं अस्पष्ट रूप से याद किया, इतनी तेजी से (kudos, एसीएम! -)। मैंने इस विषय पर कभी भी कोई मूल शोध नहीं किया है।
इस तरह यादृच्छिक टोकन के अनुक्रम का उत्पादन strightforward की तरह है; लक्ष्य प्रतीक से शुरू, unfilled nonterminals का कोई यादृच्छिक विस्तार चुनें। आप शायद जेनरेटेड पार्स पेड़ की किसी भी शाखा को किसी प्रकार की शाखा-बाध्य खोज चाहते हैं ताकि आप गहराई/आकार को नियंत्रित कर सकें।
लेकिन मुझे पार्सर्स को इस तरह से परीक्षण करने में बहुत अधिक मूल्य दिखाई नहीं देता है, कम से कम नहीं यदि आपका पार्सर जनरेटर संदर्भ मुक्त भाषा विवरण सीधे स्वीकार करता है। ऐसा तब होता है जब आप पूर्ण संदर्भ मुक्त पार्सर जेनरेटर/टूल जैसे जीएलआर (जो हम अपने प्रोग्राम ट्रांसफॉर्मेशन सिस्टम, डीएमएस) या अर्ली पार्सर में उपयोग करते हैं।
आपको एक और समस्या है: यदि आप एक पार्सर का परीक्षण करना चाहते हैं, तो आपको इसे खिलाने की ज़रूरत है, और निश्चित रूप से टोकन नहीं है। अब आपको टर्मिनल पत्तियों के लिए वैध लेक्सम उत्पन्न करना होगा। यह या तो बहुत कठिन नहीं है, लेकिन आप इस दृष्टिकोण के बारे में शुद्ध होना चाहते हैं, आप स्कैनरलेस शैली में अपना व्याकरण लिखेंगे।
लेकिन आखिरी समस्या यह है कि अधिकांश भाषाओं के लिए संदर्भ मुक्त व्याकरण खोजना मुश्किल है। तो अब आपको अपने सोने के व्याकरण को भी डीबग करना होगा; आप वो कैसे करेंगे? एक बार जब आप उस चरण तक पहुंच जाएंगे, तो आप केवल हार मानेंगे, पार्सर डीबग करेंगे, और अपने जीवन के साथ आगे बढ़ेंगे।
यादृच्छिक subtrees की पीढ़ी त्रुटि वसूली में उपयोगी है, अगर आप स्रोत स्ट्रीम को ठीक करने के लिए यादृच्छिक पेड़ में विभाजित कर सकते हैं। हम डीएमएस के पार्सर के लिए इसका सरलीकृत रूप करते हैं, जिसका अर्थ है कि हमारे पास त्रुटि प्रबंधन मशीनरी का केवल एक टुकड़ा है।
- 1. संदर्भ-मुक्त व्याकरण बनाम संदर्भ-व्याकरण व्याकरण?
- 2. संदर्भ-मुक्त व्याकरण नियमित अभिव्यक्तियों का वर्णन करता है?
- 3. मैं औपचारिक व्याकरण से वाक्यों को कैसे उत्पन्न करूं?
- 4. बूस्ट :: व्याकरण से व्याकरण रचनात्मक व्याकरण
- 5. क्या आधुनिक प्रोग्रामिंग भाषाओं के व्याकरण संदर्भ-मुक्त या संदर्भ-संवेदनशील हैं?
- 6. कौन सी प्रोग्रामिंग भाषाएं संदर्भ-मुक्त हैं?
- 7. एक स्क्लाइट तालिका से सम्मिलित कथन उत्पन्न करना
- 8. DELETE कथन संदर्भ बाधा
- 9. से मुक्त
- 10. LINQ से DB2 उत्पन्न करना?
- 11. पहले से मुक्त किसी ऑब्जेक्ट का खराब संदर्भ
- 12. व्याकरण सिंटेक्स और भाषाविज्ञान
- 13. स्कैला में एन-ग्राम कैसे उत्पन्न करें?
- 14. सभी संभव क्रमपरिवर्तन उत्पन्न (या एन-tuples)
- 15. tuples से tuples उत्पन्न करना
- 16. PEG.js व्याकरण
- 17. mysqldump द्वारा उत्पन्न/*! Xxxxxx कथन */उत्पन्न क्या है?
- 18. आईडीएल से जावा उत्पन्न करना (डिफ़ॉल्ट पैकेज से परहेज करना)
- 19. अनुकूली व्याकरण का उपयोग
- 20. पीडीओ तैयार बयानों को मुक्त करना (डीलॉकेट तैयार करें)
- 21. नक्शा उत्पन्न करना गतिशील रूप से
- 22. किसी छवि से रंग योजनाएं उत्पन्न करना
- 23. मानदंड से HTML आउटपुट उत्पन्न करना
- 24. xcode कमांड लाइन से आईपीए उत्पन्न करना
- 25. गतिशील रूप से गीज़ यूनिकोड उत्पन्न करना
- 26. स्कैला स्रोतों से यूएमएल आरेख उत्पन्न करना
- 27. एक टीसीपी/आईपी बंदरगाह मुक्त करना?
- 28. एन * एन ग्रिड
- 29. आधुनिक प्रोग्रामिंग भाषाओं में वास्तव में "संदर्भ संवेदनशील व्याकरण" में "regex" है?
- 30. स्थैतिक स्मृति मुक्त करना? कोई, यह सही
"फ़ज़िंग" (http://en.wikipedia.org/wiki/Fuzz_testing) के समान, शायद उस काम में से कुछ को लीवरेज किया जा सकता है। –