树顶:获取节点的偏移量

时间:2010-11-07 18:09:31

标签: ruby parsing 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"

基本上,我想要一种方法来访问给定offset对象(或其子类)的SyntaxNode属性。不幸的是,根据http://treetop.rubyforge.org/semantic_interpretation.htmlTreetop::Runtime::SyntaxNode上可用的唯一方法是terminal?nonterminal?text_valueelements,因此似乎没有这是一种内置的方式。

1 个答案:

答案 0 :(得分:2)

每个SyntaxNode都有一个“interval”方法,它是一个Ruby Range对象。偏移是interval.start。

Treetop的支持邮件列表位于http://groups.google.com/group/treetop-dev