1

我正在使用 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.html唯一可用的方法Treetop::Runtime::SyntaxNodeterminal?、和nonterminal?,因此似乎没有内置的方法来执行此操作。text_valueelements

4

1 回答 1

2

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

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

于 2010-11-16T21:22:36.863 回答