2013-11-12 6 views
1

Я генерируемое дерево разбора, как так:добавления к существующему Antlr дереву

afs = new AntlrFileStream(fn); 
lexer = new Verilog2001Lexer(afs); 
cts = new CommonTokenStream(lexer); 
parser = new Verilog2001Parser(cts); 
tree = parser.source_text(); 

Я хотел бы создать новые узлы из маркеров в скрытом канале и добавить их в дерево разбора. Поэтому я хотел бы спросить, как вы можете создавать новые узлы из токенов? Тогда как я могу добавить их в нужное место в дереве разбора? Я смотрел на интерфейс IParseTree и объекты контекста, и я еще не смог понять это.

ответ

1

Начиная с ANTLR 4.1, в этой среде нет прямой поддержки. Кроме того, дерево разбора должно всегда быть действительным в контексте конкретной грамматики; если вы добавите к нему узлы из токенов, первоначально на канале HIDDEN, вы нарушите этот инвариант.

Вместо того, чтобы модифицировать дерево разбора, вы должны приложить дополнительную информацию к узлам дерева синтаксического анализа, указав экземпляр ParseTreeProperty<T> для каждого свойства, с которым вы работаете, и присвоить значения свойств для конкретных экземпляров ParseTree.

+0

Показать бы приближенная ваша идея: ParseTreeProperty WS = новый ParseTreeProperty (); WS.put (узел, <пробел или текст комментария>); –

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