我只是从 ruby 和 parslet 开始,所以这对其他人来说可能很明显(希望如此)。
我想在不消耗它的情况下将所有单词都放在分隔符 (^) 之前
以下规则有效(但会消耗分隔符),结果为{:wrd=>"otherthings"@0, :delim=>"^"@11}
require 'parslet'
class Mini < Parslet::Parser
rule(:word) { match('[a-zA-Z]').repeat}
rule(:delimeter) { str('^') }
rule(:othercontent) { word.as(:wrd) >> delimeter.as(:delim) }
root(:othercontent)
end
puts Mini.new.parse("otherthings^")
我试图使用“礼物?”,
require 'parslet'
class Mini < Parslet::Parser
rule(:word) { match('[a-zA-Z]').repeat}
rule(:delimeter) { str('^') }
rule(:othercontent) { word.as(:wrd) >> delimeter.present? }
root(:othercontent)
end
puts Mini.new.parse("otherthings^")
但这会引发异常:
Failed to match sequence (wrd:WORD &DELIMETER) at line 1 char 12. (Parslet::ParseFailed)
在稍后阶段,我将要检查分隔符右侧的单词以构建更复杂的语法,这就是我不想使用分隔符的原因。
我正在使用 parslet 1.5.0。
谢谢你的帮助!