2012-09-01 17 views
7

मैं pegjs का उपयोग कर एक पार्सर बनाने की कोशिश कर रहा हूं।मैं पेग व्याकरण के साथ इसका विश्लेषण कैसे करूं?

blah blah START Lorem ipsum 
dolor sit amet, consectetur 
adipiscing elit END foo bar 
etc. 

मैं मुसीबत "START" से "END" करने के लिए पाठ को पकड़ने के लिए नियम लिख है: मैं की तरह कुछ पार्स करने के लिए की जरूरत है।

उत्तर

10

उपयोग नकारात्मक अग्रदर्शी विधेय:

phrase 
    =(!"START" .)* "START" result:(!"END" .)* "END" .* { 
    for (var i=0;i<result.length;++i) 
     // remove empty element added by predicate matching 
     {result[i]=result[i][1]; 
     } 
    return result.join(""); 
    } 

आप अंत के लिए एक नकारात्मक विधेय के साथ ही स्टार्ट उपयोग करने के लिए क्योंकि pegjs में पुनरावृत्ति लालची है की जरूरत है।

वैकल्पिक रूप से, कार्रवाई के रूप में

{return result.join("").split(',').join("");} 

लिखा जा सकता है हालांकि इस join का नहीं-जरूरी दस्तावेज व्यवहार पर निर्भर करता है जब (नेस्टेड सरणियों के साथ काम कर अर्थात् है कि यह मिलती है और उसके बाद के लिए अल्पविराम कोनकैटेनेट्स साथ उप-सरणियों उन्हें)।

[अद्यतन] खाली तत्वों से निपटने के लिए एक छोटा रास्ता

phrase 
    =(!"START" .)* "START" result:(t:(!"END" .){return t[1];})* "END" .* { 
     return result.join(""); 
    } 
+0

धन्यवाद है! !!!!!!!!! –