Dear all,
I have encounter a problem about 'lookahead' with a simplified version as:
class TestParser < Parslet::Parser
rule(:rule1) {
str('a')
}
rule(:rule2) {
str('b')
}
rule(:rule3) {
( rule1.present? >> rule2.as(:b1) ) | rule2.as(:b2)
}
rule(:rule4) {
rule1.as(:a).maybe >> rule3
}
end
p TestParser.new.rule4.parse('ab')
p TestParser.new.rule4.parse('b')
I expect the result should be:
{:a=>"a"@0, :b1=>"b"@1}
{:b2=>"b"@0}
BUT I got:
{:a=>"a"@0, :b2=>"b"@1}
{:b2=>"b"@0}
So 'present?' can not span rules? In my real application, the problem is more
complicated, so I can not just merge 'rule3' and 'rule4'.
Thanks in advance!
Best,
Li