2010-05-15 11 views
6

इसलिए पहिया को फिर से शुरू करने के लिए, मैं जानना चाहता हूं कि संदर्भ-मुक्त भाषा (जैसे yacc, आदि द्वारा उत्पादित) से यादृच्छिक बयान उत्पन्न करने के बारे में क्या किया जा चुका है। ये व्याकरण प्राथमिक रूप से पार्सिंग के लिए हैं, लेकिन शायद किसी ने पार्सर्स का परीक्षण करने के लिए कुछ पीढ़ी की है? धन्यवादसंदर्भ मुक्त व्याकरण से एन कथन उत्पन्न करना

+0

"फ़ज़िंग" (http://en.wikipedia.org/wiki/Fuzz_testing) के समान, शायद उस काम में से कुछ को लीवरेज किया जा सकता है। –

उत्तर

4

this blog post देखें। असल में, यह प्रत्येक नियम आवेदन पर चुने गए आरएचएस को यादृच्छिक बनाता है।

3

एक प्राचीन लेकिन अभी भी दिलचस्प लेख here पता चलता है कि तुम क्यों यादृच्छिक वाक्य के प्रभावी पीढ़ी के लिए कुछ और कमी की जरूरत की तुलना में आप पार्सिंग के लिए करना है - यह भी उन अतिरिक्त बाधाओं को उपलब्ध कराने की एक आसान तरीका पता चलता है और एक देता है पूरा उदाहरण कार्यक्रम (... फोरट्रान चतुर्थ में ... लेकिन, हे, यह 40 साल से अधिक है ...! -)।

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

1

इस तरह यादृच्छिक टोकन के अनुक्रम का उत्पादन strightforward की तरह है; लक्ष्य प्रतीक से शुरू, unfilled nonterminals का कोई यादृच्छिक विस्तार चुनें। आप शायद जेनरेटेड पार्स पेड़ की किसी भी शाखा को किसी प्रकार की शाखा-बाध्य खोज चाहते हैं ताकि आप गहराई/आकार को नियंत्रित कर सकें।

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

आपको एक और समस्या है: यदि आप एक पार्सर का परीक्षण करना चाहते हैं, तो आपको इसे खिलाने की ज़रूरत है, और निश्चित रूप से टोकन नहीं है। अब आपको टर्मिनल पत्तियों के लिए वैध लेक्सम उत्पन्न करना होगा। यह या तो बहुत कठिन नहीं है, लेकिन आप इस दृष्टिकोण के बारे में शुद्ध होना चाहते हैं, आप स्कैनरलेस शैली में अपना व्याकरण लिखेंगे।

लेकिन आखिरी समस्या यह है कि अधिकांश भाषाओं के लिए संदर्भ मुक्त व्याकरण खोजना मुश्किल है। तो अब आपको अपने सोने के व्याकरण को भी डीबग करना होगा; आप वो कैसे करेंगे? एक बार जब आप उस चरण तक पहुंच जाएंगे, तो आप केवल हार मानेंगे, पार्सर डीबग करेंगे, और अपने जीवन के साथ आगे बढ़ेंगे।

यादृच्छिक subtrees की पीढ़ी त्रुटि वसूली में उपयोगी है, अगर आप स्रोत स्ट्रीम को ठीक करने के लिए यादृच्छिक पेड़ में विभाजित कर सकते हैं। हम डीएमएस के पार्सर के लिए इसका सरलीकृत रूप करते हैं, जिसका अर्थ है कि हमारे पास त्रुटि प्रबंधन मशीनरी का केवल एक टुकड़ा है।

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