Если бы это был я, я бы написал это на Ruby, а потом беспокоился о скорости. Если программа стала хитом, я мог бы добавить собственный гем, чтобы ускорить самый медленный бит, но оставить большую его часть в Ruby. Если это станет самой важной программой в мире, или если мне больше нечего делать, я мог бы переписать ее на C или C ++, но не раньше.
И я бы все проанализировал, используя Treetop.
Могу добавить, что написание и оптимизация синтаксического анализатора языка непосредственно в C - это интересный опыт обучения. Вы не получаете никакой помощи при обработке строк, поэтому в итоге вы выполняете весь анализ, но у вас есть шанс выполнить только минимальный объем обработки. Это своего рода противоположность опыта Ruby. Чтобы получить максимальную скорость, вы в конечном итоге делаете что-то вроде написания фронтов для malloc, где несколько объектов, которые, как вы знаете, вам никогда не нужно освобождать, постоянно выделяются в блокируемом блоке. Хотя использование yacc (1) в C / C ++ типично, вы, безусловно, можете написать синтаксический анализатор с рекурсивным спуском и получить еще более глубокий опыт обучения.
Конечно, сделав все это уже, я рад остаться с Руби в эти дни.