Занятно, что если подняться выше, и рассматривать как токены высокоуровневые конструкции, то и С++ где-то становится контекстно-независимым.
Так всё что угодно становится хоть регулярным (если рассматривать только recognizers). ;) Но это одна из важных задач, ради которой используются lexers, на самом деле (для изменения сложности грамматики) .
Я пока на самом деле думаю что хранить ошибки в граффе плохая идея, но вообше как вариант создать таблицу ошибок и реляций. Это уже вопрос за скобками вообшем
Ну это со списком работает хорошо, а если у нас алгоритм какой диагности выплеывает то и тестировать это сложно но вопрос всеравно за скобаками, потому что задача очередей првратить процедурный код в декларативную очередь а как там тестировать диагностики это уже вопрос десятый