Обычно это делается с помощью парсеров Earley, GLR или GLL. Вы можете найти исследовательские работы, которые описывают, как они должны быть реализованы; основные идеи довольно просты (проверьте Scholar.google.com и выполните поиск по этим именам как индексным терминам).
Но структуры производственных данных и детали алгоритма становятся довольно грязными. Люди, которые создают настоящие парсерные движки, как это, обычно работали над многими такими движками, прежде чем они доберутся до этой стадии, по крайней мере, так, как это было для меня. (Я создал механизмы синтаксического анализа LALR и GLR, а также синтаксический анализатор рекурсивного спуска, который был автоматически сгенерирован из грамматик).
Я полагаю, вам лучше получить существующий генератор синтаксических анализаторов, который использует один из этих подходов, а не пытаться создать его самостоятельно. После того, как вы использовали его некоторое время и поняли проблемы, затем вы можете рассмотреть возможность реализации. Обычно не для слабонервных.