For the following Parslet Parser
require 'parslet'
require 'parslet/convenience'
class Lines < Parslet::Parser
rule(:open_tag) {str('[')}
rule(:close_tag) {str(']')}
rule(:data) {str('name') | str('name_id') }
rule(:text) { open_tag >> data >> close_tag }
root :text
end
begin
p Lines.new.parse("[name_id]") <---- It throws error
rescue Parslet::ParseFailed => failure
Lines.new.parse_with_debug("[name_id]")
end
It gives following error
Failed to match sequence (OPEN_TAG NAME CLOSE_TAG) at line 1 char 6.
`- Expected "]", but got "_" at line 1 char 6.
If I change data rule
from
rule(:data) {str('name') | str('name_id') }
to
rule(:data) {str('name_id') | str('name') }
then it works as expected.
But, I am generating rules dynamically based on user input. So this solution wont work for me.
Thanks in advance.