Я бы пошел на установленный генератор парсера, чтобы сгенерировать как лексер, так и парсер для вашей входной строки. Синтаксический анализ вручную с большей вероятностью будет подвержен ошибкам и сложен в обслуживании.
Что касается вопроса о том, какой генератор использовать, вы, вероятно, можете позволить себе немного выбирать. Если вы решите пойти по этому пути, важно создать грамматику для входной строки. Как только вы разработаете эту грамматику в каком-либо варианте BNF, вы сможете легко преобразовать ее в любой генератор, который вы выберете.
Если вы можете использовать немного C ++, вы можете использовать Boost.spirit. Чтобы разработать саму грамматику, вы можете просто использовать проверенный маршрут flex / bison, чтобы быстро приступить к работе.