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