2010-11-07 112 views
1

我正在使用Treetop爲小編程語言生成解析器。Treetop:獲取節點的偏移量

解析成功後,我想對語法樹進行一些語義分析。理想情況下,每當我遇到一段(語義上)無效的代碼時,我想打印出一條錯誤消息,其中包含發生錯誤的行。我知道這是可能的,因爲如果我這樣做

parser = MyParser.new 
tree = parser.parse("foobar") 
p tree 

我得到類似

SyntaxNode offset=0, "foobar": 
    SyntaxNode offset=0, "f" 
    SyntaxNode offset=1, "o" 
    SyntaxNode offset=2, "o" 
    SyntaxNode offset=3, "b" 
    SyntaxNode offset=4, "a" 
    SyntaxNode offset=5, "r" 

從本質上講,我想的方式訪問給定SyntaxNode對象的offset屬性(或者其子類) 。不幸的是,根據http://treetop.rubyforge.org/semantic_interpretation.htmlTreetop::Runtime::SyntaxNode上唯一可用的方法是terminal?,nonterminal?,text_valueelements,所以似乎沒有這樣做的內置方式。

回答