2015-10-06 4 views
0

Я не могу сделать сеанс Treetop в соответствии с самым основным набором правил. Любая помощь была бы оцененаБазовая грамматика 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 

ответ

1

Treetop всегда соответствует первому правилу в грамматике, если вы не передадите опцию parse(). В этом случае вы попросили его разобрать «привет» и не предоставили ему возможности достичь двух других правил.

Если вы хотите какое-либо из трех правил, чтобы соответствовать, вам необходимо добавить новое верхнее правило:

rule main 
    greeting/hello/world 
end 

Обратите внимание, что в списке заместителей, то первый один, чтобы соответствовать исключат других от того, поэтому вы не можете встретить «приветствие», если сначала поставить «привет».

 Смежные вопросы

  • Нет связанных вопросов^_^