Я не думаю, что смогу ответить на ваш вопрос так, как вы, возможно, ищете, так как я не знаю ни одного способа в ANTLR производить CFG с или без AST. Но, вкратце, вы бы использовали то, что ANTLR производит для генерации отдельной Java-программы для генерации CFG. Вы должны использовать синтаксическое дерево, сгенерированное ANTLR, в качестве входных данных для генерации вашего CFG в отдельной программе Java вашего собственного создания. На данный момент вы, по сути, строите компилятор. Разница между вашим «компилятором» и JVM заключается в том, что ваши выходные данные представляют собой визуальное представление (CFG) того, как программа разветвляет свои различные пути выполнения, а JVM / Java-компилятор создает код для выполнения на реальной машине (CPU).
Аналогия в том, что если кто-то садится писать книгу (например, на английском языке), отдельные слова, используемые в предложениях, являются ЖЕСТКАМИ компьютерного языка, предложения формируются аналогично тому, как грамматики без контекста выражают действительный компьютерный код. и параграфы и целые романы рассказывают историю аналогичным образом, что семантический анализ / компиляторы / CFG могут создавать / представлять логически обоснованные программы, которые действительно делают что-то полезное и более или менее свободны от логических ошибок. Другими словами, как только вы преодолеете проблему правильного синтаксиса (правильной структуры предложений), любой может написать несколько предложений на странице, но только определенные комбинации предложений создают текст, который действительно что-то делает (рассказывает историю).
То, о чем вы спрашиваете, это последняя часть - как взять синтаксическое дерево и преобразовать или интерпретировать то, что AST фактически делает логически. И, конечно, вам нужно будет создать «компилятор» для каждого языка, для которого вы хотите это сделать. Наличие правильной грамматики не говорит вам , что делает программа - только то, что программа правильна с точки зрения грамматики.
Линтеры, подсветки синтаксиса и интегрированные среды разработки построены вокруг идеи попытаться сделать этот последний кусочек головоломки более простым и более эффективным заданием для людей.