के साथ पार्स इंडेंटेशन स्तर मेरे पास अनिवार्य रूप से PEG for Python style indentation जैसा प्रश्न है, लेकिन मैं this answer के बारे में थोड़ा और दिशा प्राप्त करना चाहता हूं।PEG.js
उत्तर सफलतापूर्वक स्ट्रिंग्स की एक सरणी उत्पन्न करता है जो लाइनों के बीच 'इंडेंट' और 'डेडेंट' के साथ इनपुट की प्रत्येक पंक्ति होती है। ऐसा लगता है कि वह टोकननाइज़ करने के लिए बहुत अधिक उपयोग किए गए PEG.js है, लेकिन कोई असली पार्सिंग नहीं हो रहा है।
तो मैं कुछ वास्तविक पार्सिंग करने के लिए अपना उदाहरण कैसे बढ़ा सकता हूं?
start = obj
obj = id:id children:(indent obj* outdent)?
{
var o = {};
o[id] = children[1];
return (children[1] ? o : id);
}
id = [a-z]
indent = '{'
outdent = '}'
ब्रेसिज़ के बजाय खरोज उपयोग करने के लिए ब्लॉक चित्रित करने के लिए, और अभी भी एक ही आउटपुट मिलता है:
एक उदाहरण के रूप में, मैं इस व्याकरण कैसे बदल सकते हैं?
(निम्नलिखित इनपुट के साथ कि व्याकरण का परीक्षण करने के http://pegjs.majda.cz/online का उपयोग करें: a{bcd{zyx{}}}
)
मैं वास्तव में इस anwser की सराहना करता हूं। आप इस विधि के साथ कैसे आते हैं? – jiyinyiyong
यदि मैं इसे सीधे http://pegjs.majda.cz/online में कॉपी/पेस्ट करता हूं तो यह संकलित नहीं होता है। और कुछ tweaking के बाद यह स्पष्ट नहीं है कि इसे कैसे "ठीक करें"। – Clearly
बस इसका परीक्षण किया गया, स्निपेट संकलित और अपेक्षाकृत आउटपुट का उत्पादन ठीक है। सुनिश्चित नहीं है कि आपने वहां कौन सी त्रुटियां डालीं। – chakrit