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.html,Treetop::Runtime::SyntaxNode
上唯一可用的方法是terminal?
,nonterminal?
,text_value
和elements
,所以似乎沒有這樣做的內置方式。