Treetop: immer den Offset eines Knotens
Frage
Ich bin Treetop mit einem Parser für eine kleine Programmiersprache zu erzeugen.
Nach dem erfolgreichen Analyse, würde Ich mag einige semantische Analyse auf dem Syntaxbaum zu tun. Idealerweise, wenn ich ein Stück (semantisch) ungültigen Code auftreten, würde Ich mag eine Fehlermeldung drucken, die die Zeile enthält, wo der Fehler aufgetreten ist. Ich weiß, das ist möglich, weil, wenn ich
parser = MyParser.new
tree = parser.parse("foobar")
p tree
Ich bekomme so etwas wie
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"
Im Wesentlichen würde ich einen Weg, wie das offset
Attribut eines bestimmten SyntaxNode
Objekt zuzugreifen (oder Unterklasse davon). Leider nach http://treetop.rubyforge.org/semantic_interpretation.html die einzigen Methoden zur Verfügung auf Treetop::Runtime::SyntaxNode
sind terminal?
, nonterminal?
, text_value
und elements
, so hat es keine integrierte Möglichkeit, scheint dies zu tun zu sein.
Lösung
Jeder SyntaxNode hat ein „Intervall“ Verfahren, das ein Ruby Range-Objekt ist. Offset ist interval.start.
Treetop-Support-Mailingliste ist unter http://groups.google.com/group/treetop- dev