有没有办法使用Treetop以编程方式匹配多个单词。语言gem将复数形式的单词,但如何将其插入到解析器中。
下面是我想要做的一个例子:
#!/usr/bin/env ruby
require 'treetop'
require 'linguistics'
include Linguistics::EN
Treetop.load_from_string DATA.read
parser = RecipeParser.new
p parser.parse('cans')
__END__
grammar Recipe
rule units
unit &{|s| plural(s[0].text_value) }
end
rule unit
'can'
end
end发布于 2012-10-12 08:05:31
一般来说,语言gem不能将任意的Treetop规则定义复数形式--它们不是字符串。
使用语义谓词,您的recipe.treetop文件可以在一个数组中定义所有有效的单数unit字符串,将它们复数,然后创建一条规则,将有问题的标记与这些复数单元中的每一个进行比较:
require "linguistics"
grammar Recipe
rule units
[a-zA-Z\-]+ &{ |u|
Linguistics.use(:en)
singular_units = [ "can" ]
singular_units.
map(&:en).
map(&:plural).
include?(u[0].text_value)
}
end
endhttps://stackoverflow.com/questions/12532010
复制相似问题