Domanda

sto usando Treetop per generare un parser per un piccolo linguaggio di programmazione.

Al momento del parsing di successo, mi piacerebbe fare qualche analisi semantica sul albero di sintassi. Idealmente, ogni volta che incontro un pezzo di (semanticamente) codice non valido, vorrei stampare un messaggio di errore che include la linea di cui si è verificato l'errore. So che questo è possibile perché se lo faccio

parser = MyParser.new
tree = parser.parse("foobar")
p tree

I ottenere qualcosa di simile

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"

Essenzialmente, vorrei un modo per accedere all'attributo offset di un dato oggetto SyntaxNode (o sottoclasse di esso). Purtroppo, secondo http://treetop.rubyforge.org/semantic_interpretation.html gli unici metodi disponibili su Treetop::Runtime::SyntaxNode sono terminal?, nonterminal?, text_value e elements, quindi non sembra essere un built-in modo di fare questo.

È stato utile?

Soluzione

Ogni SyntaxNode ha un metodo "intervallo", che è un oggetto rubino Range. Offset è interval.start.

mailing list di supporto di Cima di albero è a http://groups.google.com/group/treetop- dev

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top