Большинство программ lex/yacc работают с хорошо определенной грамматикой. Если Вы можете определить грамматику в терминах BNF подобного формата (который большинство синтаксических анализаторов принимает аналогичный синтаксис), то Вы можете использовать любой из них. Это может означать очевидное. Тем не менее, вы все еще можете быть немного нечеткими вокруг "блоков" (маркеров) текста, которые будут частью вашей грамматики. В конце концов, вы определяете правила для ваших жетонов.
В прошлом я использовал Parse-RecDescent Perl модуль с разной степенью успеха для похожих проектов.
Извините, это может быть плохим ответом, но я больше делюсь своим опытом работы с похожими проектами.
Если вы действительно хотите пойти по этому маршруту, я могу уточнить детали. Но это будет много работы.
Многие легкие языки разметки, такие как markdown (который, кстати, SO использует), reStructured text и (возможно) POD, похожи на те, о которых вы говорите. Они имеют минимальный синтаксис и разбивают ввод на разборчивые синтаксические фрагменты. Вы можете получить некоторую информацию, прочитав об их реализациях.
попробуйте: pygments, geshi, или prettify
Они могут справиться практически со всем, что вы им предложите, и очень снисходительны к ошибкам как в грамматике, так и в документах.
Ссылки:
gitorius использует prettify,
github использует pygments,
rosettacode использует geshi,