2010-11-07 4 views
1

Я использую 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" 

По существу, я хотел бы способ, чтобы получить доступ к атрибуту данного объекта SyntaxNodeoffset (или его подкласс) , К сожалению, согласно http://treetop.rubyforge.org/semantic_interpretation.html, единственными методами, доступными на Treetop::Runtime::SyntaxNode, являются terminal?, nonterminal?, text_value и elements, поэтому, похоже, не существует встроенного способа сделать это.

ответ

2

Каждый SyntaxNode имеет метод «интервал», который является объектом диапазона Ruby. Смещение - интервал.

Подписной список поддержки Treetop составляет http://groups.google.com/group/treetop-dev

Смежные вопросы