0

我无法根据最基本的规则集进行 Treetop 解析。任何帮助,将不胜感激

# my_grammar.treetop
grammar MyGrammar
  rule hello
    'hello'
  end

  rule world
    'world'
  end

  rule greeting
    hello ' ' world
  end
end

# test.rb
require 'treetop'
Treetop.load 'my_grammar'
parser = MyGrammarParser.new

puts parser.parse("hello").inspect # => SyntaxNode offset=0, "hello"
puts parser.parse("world").inspect # => nil
puts parser.parse("hello world").inspect # => nil
4

1 回答 1

1

除非您将选项传递给 parse(),否则 Treetop 始终匹配语法中的第一条规则。在这种情况下,您已经要求它解析“hello”,并且没有提供任何方法让它达到其他两个规则。

如果您希望三个规则中的任何一个匹配,则需要添加一个新的顶级规则:

rule main
  greeting / hello / world
end

请注意,在替代列表中,第一个匹配的将排除其他人的测试,因此如果您将“hello”放在首位,则无法匹配“greeting”。

于 2015-10-07T00:27:33.850 回答