Казалось бы, если вы умеете парсить текст, то вы умеете и размечать его разными цветами.
Ну, ещё можно попробовать сделать инкрементальный пересчёт, чтобы было быстрее.
Для этого, как мне кажется, был бы неплох CYK-алгоритм, он всё равно считает очень кроваво.