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.

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top