Question

J'utilise arboricole pour générer un analyseur pour un langage de programmation.

Lors de l'analyse syntaxique réussie, je voudrais faire une analyse sémantique sur l'arbre de syntaxe. Idéalement, chaque fois que je rencontre un morceau de (sémantiquement) code invalide, je voudrais imprimer un message d'erreur qui inclut la ligne où l'erreur est survenue. Je sais que cela est possible parce que si je fais

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

Je reçois quelque chose comme

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"

Pour l'essentiel, je voudrais un moyen d'accéder à l'attribut offset d'un objet SyntaxNode donné (ou sous-classe de celle-ci). Malheureusement, selon http://treetop.rubyforge.org/semantic_interpretation.html les seules méthodes disponibles sur Treetop::Runtime::SyntaxNode sont terminal?, nonterminal?, text_value et elements, donc il ne semble pas être un moyen intégré de le faire.

Était-ce utile?

La solution

Chaque SyntaxNode a une méthode « intervalle » qui est un objet Range Ruby. Le décalage est interval.start.

Liste de diffusion de soutien arboricole est à http://groups.google.com/group/treetop- dev

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top