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

Reply via email to