Простой ответ - «Нет».
Любой вид обобщения из примеров страдает от основного факта, что это угадывание .Вы можете догадаться , что у языка есть жетон "если".Нет никакой гарантии, что это так, или что оно написано , если , или что у него есть семантика, которую вы понимаете.Вы не получите автоматизированный инструмент для создания грамматики для вас.
Лучше всего взять все документы, которые вы можете получить, которые описывают язык, и, ну, в общем, угадать в грамматике.Затем вы создаете синтаксический анализатор для грамматики, проверяете его на соответствие настолько большой базе кода, сколько сможете найти, и пересматриваете.Я делал это десятки раз с широким разнообразием языков (см. Мою биографию).
Это больно, но вы часто получаете что-то очень полезное.Хорошей новостью является то, что вашему парсеру не нужно разбирать то, что пользователи не умеют писать.Плохая новость заключается в том, что они будут писать вещи на основе какого-то неясного примера, который вы никогда не видели, или с опечаткой, которая случайно работает.(Даже разработчик языка не хотел этого, но это не имеет значения для пользователя; его программа работает, а ваш компилятор - нет. Ваша проблема по определению).
То, что вы никогда не узнаете, так этоесли у провайдера языка есть определенные функции, он просто не задокументировал и больше никому не показывал.Будьте постоянно готовы удивляться, даже после того, как вы закончите: - {
Теперь лучший инструмент, который вы можете использовать для этого процесса, IMHO, это генератор синтаксического анализатора GLR ;это то, что использует моя компания.Они будут анализировать любой неконтекстный язык (который вы могли бы предложить) без особых усилий согнуть грамматику, чтобы она соответствовала другим распространенным ограничениям парсера рекурсивного спуска, LL (k) или LR (k).Жизнь достаточно сложна, чтобы угадать грамматику, не говоря уже о угадывании грамматики, а затем угадать, как согнуться к ней, чтобы генератор синтаксического анализатора проглотил ее правильно.
У вас также есть проблема создания переводчика, как только вы правильно понимаете грамматику.Вам может быть полезен этот SO-ответ: Какие шаблоны можно использовать в коде, чтобы упростить перевод на другой язык программирования?