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