Сложно ответить на вопрос в таких общих терминах, но вот некоторые из моих мыслей.
Использование F # для создания парсера звучит хорошо.
FSParsecотличная библиотекаЯ немного неравнодушен к FSLex и FSYacc.В любом случае, в F # есть библиотеки, специально разработанные для синтаксического анализа, которые экономят ваше время.
Генерация кода с помощью звуков DLR в порядке.
DLR - отличная платформадинамическая генерация кода.Тем не менее, ваше приложение гораздо более конкретным.Если вы ограничиваете себя только вычислением значений, вам следует использовать API-интерфейсы Expression Trees из .NET 3.5.Этот API предназначен для представления произвольных выражений кода.DLR, с другой стороны, разработан как среда выполнения или динамические языки.Я не говорю, что это невозможно, просто это не правильный инструмент для работы.
Не компилируйте сгенерированный вами код.
Если вы это сделаетеесли вы будете использовать DLR для представления вашего AST, стоимость компиляции и выполнения, вероятно, будет намного выше, чем просто интерпретация дерева.Скомпилируйте код, если: A.) вы выполняете одну и ту же функцию / метод много раз или B.) функция / метод очень сложная.
C # + DLR, IronPython, F #или какая-то комбинация из трех - все это выбор звука.В конечном счете, «правильный» выбор - это тот, который выполняет работу как можно быстрее.