Отказ от ответственности: я серьезно не изучал эту область, но надеюсь, что эта небольшая статья может быть полезна для вас - и жду, чтобы увидеть больше ответов от других.
Я думаю, что есть несколько вопросов в одном:
1) Решатели уравнений.
если вы имеете в виду символическое «решение для неизвестных» - это довольно большая куча работы, с которой вы собираетесь начать, ИМХО :-) Вы собираетесь приступить к созданию системы компьютерной алгебры .
Переписывание терминов - довольно большая тема сама по себе. Если вам особенно интересны манипуляции на этом уровне, возможно, с C будет не так легко работать - вам, вероятно, будет легче с Lisp для этой задачи.
Примечательно, что не каждый набор уравнений будет иметь решение - и «просто» выяснить, есть ли у него решение или нет, - сложная задача сама по себе.
С другой стороны, если вы посмотрите на численное решение уравнений, что-то вроде , это может быть интересно посмотреть.
2) Функциональное программирование в целом.
Хаскель является отличным языком для этого (хотя я все еще очень новичок в этом - я думаю, что он может быть одним из самых элегантных). OCaml может быть еще одним путем для изучения. Тогда, конечно, есть схема. Язык, имеющий непосредственные практические последствия, может быть XSLT, если вы имеете дело с веб-программированием.
И, конечно, вы можете легко написать функциональный стиль на Ruby и Python. Очень интересно наблюдать, как изучение новых языков в целом меняет ваши шаблоны программирования на «основном» языке. Итак, теория языка или нет - чем больше языков вы касаетесь, тем лучше.
3) Написание переводчиков и т. Д.
Я подозреваю, что с учетом сути вопроса наиболее интересным практическим приложением для того, что вы хотели бы сделать, был бы не интерпретатор, а код оптимизации в компиляторе. Для этого - Книга Дракона и Курс компьютерной инженерии MIT , на мой взгляд, было бы полезно начать с. Тогда вы можете взять, например, копия TCC и игра с ней. Если вы хотите повозиться с чем-то менее традиционным, взгляните на potion - очень интересный языковой эксперимент, в котором в качестве «байт-кода» используется машинный код x86 (следовательно, производительность на машинах x86 довольно впечатляющая). 1037 *
Этот вопрос по SO на самом деле ссылается на большинство ссылок из (3) выше и еще несколько.