Индентор кода с использованием ANTLR 4

Я пишу индентор кода, используя ANTLR4 и Java. Я успешно сгенерировал лексер и парсер. И подход, который я использую, состоит в том, чтобы пройти через сгенерированное дерево разбора.

  ParseTreeWalker mywalker = new ParseTreeWalker();
  mywalker.walk(myListener, myTree);    

У автоматически сгенерированного *BaseListener есть методы как ниже...

@Override public void enterEveryRule(ParserRuleContext ctx) { }

Я очень новичок в ANTLR. Но, как я понимаю, мне нужно расширить *BaseListener и переопределить соответствующие методы и написать код для отступа, поэтому мой вопрос в том, какие методы мне следует переопределить для отступа файла входного кода? Или, если я выберу альтернативный подход, пожалуйста, дайте мне знать.

Спасибо!

1 ответ

Никто. Для этой задачи вам не нужен синтаксический анализатор, и вы ограничиваете себя допустимым кодом, когда вам требуется синтаксический анализатор (следовательно, вы не можете переформатировать код с синтаксической ошибкой). Вместо этого возьмите лексер и переберите все токены. Сохраняйте состояние, чтобы знать, где вы находитесь (блок, функция и т. Д.) И делайте отступ в соответствии с этим.

Другие вопросы по тегам