Я совершенно новичок в ANTLR, но хочу преобразовать SQL-подобную грамматику из ANTLR 2 в ANTLR 4. Чтобы проверить это, я надеялся использовать вывод ANTLR 2 parser.getAST().toStringList() для сравнения с чем-то аналогичным, сгенерированным ANTLR 4. В ANTLR 4 я пробовал использовать Trees.toStringTree(tree, parser), который генерирует нечто подобное, но не включает токены, но затем включает все идентификаторы правил. В частности, это то, что я имею при анализе чего-то вроде select * from /ABC:
ANTLR 2 -
Код: Выделить всё
( [queryProgram,] ( SELECT [*,]
( FROM ( [iterDef,] [/ABC,] ) ) ) )
ANTLR 4 -
Код: Выделить всё
(queryProgram (query (selectExpr select (projectionAttributes *)
(fromClause from (iteratorDef (expr (castExpr (orExpr (orelseExpr
(andExpr (quantifierExpr (andthenExpr (equalityExpr (relationalExpr
(additiveExpr (multiplicativeExpr (inExpr (unaryExpr (postfixExpr
(primaryExpr (regionPath /XYZ))))))))))))))))) )
Итак, мой общий вопрос: как я могу проверить это преобразование? В настоящее время практически не существует тестов, специфичных для парсера, для кода ANTLR 2. Однако существует МНОГО интеграционных тестов. Я бы предпочел, чтобы что-то было ориентировано только на те изменения синтаксического анализа, которые мне нужно внести (преобразование с AST на основе посетителей).
Подробнее здесь:
https://stackoverflow.com/questions/798 ... conversion