मैं रुबी के भीतर Parslet लाइब्रेरी का उपयोग करके एक साधारण इंडेंटेशन संवेदनशील वाक्यविन्यास को पार्स करने का प्रयास कर रहा हूं।रुबी में अजमोद का उपयोग कर इंडेंटेशन संवेदनशील पार्सर?
level0child0
level0child1
level1child0
level1child1
level2child0
level1child2
जिसके परिणामस्वरूप पेड़ तो ऐसा दिखाई देगा::
[
{
:identifier => "level0child0",
:children => []
},
{
:identifier => "level0child1",
:children => [
{
:identifier => "level1child0",
:children => []
},
{
:identifier => "level1child1",
:children => [
{
:identifier => "level2child0",
:children => []
}
]
},
{
:identifier => "level1child2",
:children => []
},
]
}
]
पार्सर मैं अब है कि नेस्टिंग स्तर पार्स कर सकते हैं
निम्न सिंटैक्स मैं पार्स करने के लिए प्रयास कर रहा हूँ का एक उदाहरण है 0 और 1 नोड्स, लेकिन अतीत को पार्स नहीं कर सकते हैं:
require 'parslet'
class IndentationSensitiveParser < Parslet::Parser
rule(:indent) { str(' ') }
rule(:newline) { str("\n") }
rule(:identifier) { match['A-Za-z0-9'].repeat.as(:identifier) }
rule(:node) { identifier >> newline >> (indent >> identifier >> newline.maybe).repeat.as(:children) }
rule(:document) { node.repeat }
root :document
end
require 'ap'
require 'pp'
begin
input = DATA.read
puts '', '----- input ----------------------------------------------------------------------', ''
ap input
tree = IndentationSensitiveParser.new.parse(input)
puts '', '----- tree -----------------------------------------------------------------------', ''
ap tree
rescue IndentationSensitiveParser::ParseFailed => failure
puts '', '----- error ----------------------------------------------------------------------', ''
puts failure.cause.ascii_tree
end
__END__
user
name
age
recipe
name
foo
bar
यह स्पष्ट है कि मुझे डायनेमी की आवश्यकता है सी काउंटर जो 3 इंडेंटेशन नोड्स को घोंसले स्तर पर पहचानकर्ता से मेल खाने की अपेक्षा करता है 3.
मैं इस तरह से अजमोद का उपयोग कर इंडेंटेशन संवेदनशील वाक्यविन्यास पार्सर को कैसे कार्यान्वित कर सकता हूं? क्या यह संभव है?
सुनिश्चित नहीं हैं कि अगर यह बेहतर पार्स के रूप में किया/अलग-अलग चरणों का निर्माण कर रहा है। इंडेंटेशन स्तरों का बहुत अधिक संयोजन वैध और पार्स होगा, इसलिए मेरे लिए यह एक बहुत ही सरल रेखा-आधारित पार्सर को इंगित करता है जो केवल इंडेंटेशन स्तर को कैप्चर करता है, फिर कुछ ऐसा जो पार्सर आउटपुट लेता है और आपकी घोंसला वाली संरचना बनाता है। –