对于以下 Parslet 解析器
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
它给出以下错误
Failed to match sequence (OPEN_TAG NAME CLOSE_TAG) at line 1 char 6.
`- Expected "]", but got "_" at line 1 char 6.
如果我data rule
从
rule(:data) {str('name') | str('name_id') }
至
rule(:data) {str('name_id') | str('name') }
然后它按预期工作。
但是,我正在根据用户输入动态生成规则。所以这个解决方案对我不起作用。
提前致谢。