«EBNF как лексер» является бессмысленным. Но остальная часть вашего вопроса может быть истолкована так: «могу ли я получить парсер, управляемый EBNF, для производства АСТ в форме JSON?»
Несомненно.
Большинство генераторов парсеров принимают (E) BNF и «разбор». Большинство из них автоматически не производят АСТ; они заставляют программиста определять, как каждое правило должно генерировать узлы дерева. Те не будут работать для вашей задачи.
Некоторые из них генерируют АСТ как структуры данных автоматически, используя только BNF и исходный файл: ANTLR4 (я думаю), и наш DMS Software Reengineering Toolkit. Ни один из них не производит JSON напрямую, но в обоих случаях следует написать (один раз) общий древоход, который плюет JSON.
BNF DMS будет обрабатывать любую контекстно-свободную грамматику, используя только Правила BNF. ANTLR4 обрабатывает большинство грамматик, но имеет ограничения на то, что вы можете написать (например, некоторые виды левых рекурсий verboten), и требования для вас добавить дополнительную информацию о том, что грамматика не LL (1).
DMS будет напрямую экспортировать XML. См. this example.
Так что, если мне нужно написать древовидный, то не имеет смысла, какое программное обеспечение использовать, даже YACC с кодом C. Я прав? –
Если не произойдет чудо, и кто-то предлагает вам пакет, который делает именно то, что вы указали (я знаю мир парсера довольно хорошо, я думаю, что у него мало шансов), вы не собираетесь делать какую-то работу. YACC хуже, чем ANTLR/DMS, потому что он не создает деревья для вашей грамматики вообще без значительной помощи для вас. Прогулка по дереву довольно легко построить, если у вас есть AST. Если это не очевидно для вас, то я сомневаюсь, что вы сможете использовать результат JSON. –
Итак, нет никакого программного обеспечения для преобразования источника в плоский список лексем, который можно было бы использовать для сборки АСТ? –