Я использую Treetop для генерации парсера для небольшого языка программирования.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"
По существу, я хотел бы способ, чтобы получить доступ к атрибуту данного объекта SyntaxNode
offset
(или его подкласс) , К сожалению, согласно http://treetop.rubyforge.org/semantic_interpretation.html, единственными методами, доступными на Treetop::Runtime::SyntaxNode
, являются terminal?
, nonterminal?
, text_value
и elements
, поэтому, похоже, не существует встроенного способа сделать это.