0

最も基本的なルールセットに従ってツリートップを解析することはできません。どんな助けでもいただければ幸いです

# 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」を解析するように要求し、他の 2 つのルールに到達する方法を提供していません。

3 つのルールのいずれかを一致させたい場合は、新しいトップ ルールを追加する必要があります。

rule main
  greeting / hello / world
end

代替のリストでは、最初に一致したものが他のものをテストから除外することに注意してください。そのため、「hello」を最初に置くと「greeting」を一致させることはできません。

于 2015-10-07T00:27:33.850 に答える