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_valueおよびのみelementsであるため、これを行う組み込みの方法はないようです。

4

1 に答える 1

2

各SyntaxNodeには、RubyRangeオブジェクトである「interval」メソッドがあります。オフセットはinterval.startです。

Treetopのサポートメーリングリストはhttp://groups.google.com/group/treetop-devにあります

于 2010-11-16T21:22:36.863 に答える