2009-07-06 13 views
9

मैं सीएसएस पार्स करने के लिए एक पार्सर लिख रहा हूं।सीएसएस पार्सर का परीक्षण कैसे करें?

मैंने CSS reference grammar को संशोधित करके शुरू किया, जो भी व्याकरण और लेक्सर सिंटैक्स का उपयोग करने के लिए 3rd-party parser generator tool द्वारा समर्थित है जिसका उपयोग मैं कर रहा हूं।

मुझे लगता है कि मैंने व्याकरण को कोडिंग समाप्त कर दिया है: पार्सर जनरेटर अब मेरे व्याकरण के लिए/राज्य संक्रमण तालिका उत्पन्न करने में सक्षम है।

परिणाम (पार्सर जनरेटर से आउटपुट) लगभग 116 "नियम" है, जो switch कथन में 116 मामलों के अनुरूप है। इन नियमों/स्विच बयान के उदाहरण हैं:

  1. स्टाइल शीट एक चारसेट निर्दिष्ट किए बिना एक चारसेट
  2. स्टाइल शीट शुरू होता है निर्दिष्ट करने के साथ शुरू होता है:
  3. स्टाइल शीट खाली
  4. स्टाइल शीट खाली स्थान के
  5. के साथ शुरू होता है ... आदि ...

पार्सर जनरेटर ने मेरे लिए यह सब कुछ किया है, और अब मैं विभिन्न हाथों से लिखना शुरू कर रहा हूं स्विच स्टेटमेंट के मामले, जो मुझे लगता है कि लोग 'अमूर्त वाक्यविन्यास पेड़' कहेंगे।

मेरा प्रश्न यह जांचने के तरीके के बारे में है। मुझे लगता है कि जो मैं चाहता हूं वह सीएसएस फाइलों का एक सेट है जो विभिन्न संयोजन और संभावनाओं का प्रयोग करता है: उदा। एक सीएसएस फ़ाइल जो एक वर्णमाला निर्दिष्ट करती है; एक और फाइल जो एक वर्णमाला निर्दिष्ट नहीं करती है; आदि

  • वहाँ है सामान्य के लिए एक रास्ता स्वत: जनरेट एक मनमाना व्याकरण के लिए इनपुट डेटा के इस सेट, या नियमों का समूह?

  • वैकल्पिक रूप से, का एक सेट है विशेष रूप से सीएसएस फ़ाइलें, जिसका उद्देश्य मानक सीएसएस व्याकरण द्वारा अनुमत संयोजन और संभावनाओं को कवर करना है?

अगर मैं यह सब गलत कर रहा हूं तो भी टिप्पणी करने के लिए स्वतंत्र महसूस करें।

फिलहाल मैं की जरूरत नहीं है:

  • फ़ाइलें अवैध इनपुट की हैंडलिंग का परीक्षण करने के

  • कैसे की परीक्षण (फ़ाइलें जो व्याकरण के अनुरूप नहीं है की यानी) विभिन्न ब्राउज़रों पर सीएसएस के उनके पार्स आधारित प्रस्तुत करना

उत्तर

4

माइक्रोसॉफ्ट ने सीएसएस स्पेक के साथ आईई 8 अनुपालन के लिए हजारों सीएसएस परीक्षणों का एक सेट बनाया। http://samples.msdn.microsoft.com/ietestcenter/css.htm

हालांकि वे ब्राउज़र अनुपालन का परीक्षण करने पर केंद्रित हैं, संभवतः आप उन्हें अनुकूलित कर सकते हैं।

भी बड़े W3C परीक्षण स्वीट है, जो के रूप में पूरे नहीं हुए हैं कर रहे हैं, लेकिन अपने उद्देश्य पूरा हो सकता है: http://www.w3.org/Style/CSS/Test/

+0

माइक्रोसॉफ्ट लिंक मर चुका है – Dannnno

2

एक संदर्भ मुक्त व्याकरण परोक्ष (पार्स) पेड़ की एक अनंत सेट का प्रस्ताव। प्रत्येक प्रस्तावित पेड़ में पत्तियों का एक सेट होता है जो उस व्याकरण द्वारा स्वीकार की गई भाषा में एक ठोस वाक्य बनाता है। प्रस्तावित पेड़ों के सेट की खोज करके (उदाहरण के लिए, प्रत्येक विकल्प के अनुसार प्रत्येक nonterminal का विस्तार करके), आप भाषा के किसी भी मनमाना उदाहरण उत्पन्न कर सकते हैं। आप वृक्ष प्रस्तावों को चलाकर और यादृच्छिक विकल्प बनाकर परीक्षणों का एक सेट उत्पन्न कर सकते हैं। एक अधिक केंद्रित दृष्टिकोण आकार द्वारा क्रमबद्ध वाक्यों को उत्पन्न करने के लिए पुनरावृत्ति गहन खोज का उपयोग करना होगा। किसी भी रोचक व्याकरण के साथ, आपको बड़ी संख्या में उदाहरण मिलेंगे, लेकिन हे, यही स्वचालित परीक्षण है।

मैं जो नहीं करूँगा वह आपके उत्पादन व्याकरण से ऐसे वाक्य उत्पन्न करता है, क्योंकि आपके द्वारा जेनरेट किए गए वाक्य परिभाषा के अनुसार होंगे, जो इसे स्वीकार करते हैं: - {आपको क्या करना चाहिए संदर्भ का उपयोग करके अपने वाक्य जनरेटर का निर्माण करना चाहिए व्याकरण, इस तथ्य का फायदा उठाने के लिए कि आप इसे स्वीकार करते हैं और आपने जो कार्यान्वित किया है वह अलग हो सकता है।

+0

मेरे व्याकरण के साथ मेरे पास लगभग 55 गैर-टर्मिनल हैं। यदि मैं इसे शीर्ष-डाउन पार्सर के रूप में मूल्यांकन करता हूं, तो शीर्ष-स्तरीय गैर-टर्मिनल से जुड़ी विधि निचले स्तर के गैर-टर्मिनल से जुड़ी विधियों को आमंत्रित करती है, और इसी तरह से नीचे। प्रत्येक गैर टर्मिनल विधि लगभग 1 से 3 निचले स्तर के तरीकों (विधि के भीतर 'स्विच' कथन के माध्यम से) को आमंत्रित करती है, और इसे 1 या कभी-कभी 2 अलग-अलग higer-level विधियों द्वारा बुलाया जाता है। यह केवल पूर्ण कोड कवरेज प्राप्त करने के लिए कुछ होगा: यह सुनिश्चित करने के लिए कि प्रत्येक संभावना कम से कम एक बार (प्रत्येक संभावना के हर संयोजन की उम्मीद न हो), ... – ChrisW

+0

... जो (55 x 3 =) 150 टेस्ट केस। मुझे लगता है कि मैं आपसे सहमत हूं कि इन परीक्षण मामलों को स्वचालित रूप से व्याकरण से उत्पन्न करने में बहुत कम होना चाहिए। मैंने हालांकि पूछा क्योंकि मुझे औपचारिक रूप से स्कूल में पार्सिंग के बारे में कभी नहीं बताया गया था, जबकि अन्य लोग थे: और मुझे आश्चर्य हुआ कि आपको सिखाया गया था कि क्या पार्सर्स परीक्षण के लिए कुछ प्रसिद्ध एल्गोरिदम हैं। – ChrisW

+0

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

1

ओपी के लिए 4 साल देर से लेकिन SimonSapin/css-parsing-tests पार्सर्स के लिए एक सभ्य परीक्षण सूट की तरह लगता है।

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