Оценка выражений единиц измерения с использованием цитат и F # Powerpack CodeDOM - PullRequest
1 голос
/ 10 октября 2010

Кто-нибудь знает, возможно ли отправить выражение цитаты f #, которое включает в себя (единицу измерения), в F # CodeDOM (поставляется в блоке питания codeplex) для компиляции на лету?

Сценарий, которыйЯ пытаюсь добиться, чтобы у меня был компонент времени выполнения, который позволял бы мне вводить простое выражение в какое-то текстовое поле, которое затем отправлялось бы в CodeDOM для компиляции или, может быть, прямо в Fsc.exe.В целом, я хотел бы использовать компилятор F # во время выполнения, чтобы скомпилировать фрагмент кода (как я могу в C # с поставщиком C # CodeDOM), чтобы использовать функцию единиц измерения.Возможна ли такая вещь?

1 Ответ

1 голос
/ 10 октября 2010

Поставщик CodeDOM в F # PowerPack компилирует сгенерированный исходный код с использованием компилятора F #, поэтому он поддерживает весь язык F #, включая единицы измерения. Объекты CodeDOM, используемые для представления кода, весьма ограничены, и у них нет способа непосредственного представления единиц измерения. Однако вы можете использовать CodeSnippetExpression , что позволяет использовать любой текст (строку) как часть дерева CodeDOM (и генератор просто вставит текст в сгенерированный исходный код).

  • Это должно быть простым в использовании (на самом деле, вы можете просто передать введенный пользователем текст в CodeDom либо с помощью CodeSnippetExpression, либо с использованием аналогичного типа (который допускает целые операторы / типы / и т.
  • Компиляция выполняется путем вызова fsc.exe, что означает, что пользователям необходимо установить компилятор F #, а приложению нужны права для запуска других приложений.

Вы также упомянули цитаты в своем вопросе. Цитаты являются представлением исходного кода F #, но нет встроенного синтаксического анализатора, который бы создавал цитату из строки (введенной пользователем). Если вы создали такой парсер (для строк, которые будут вводить ваши пользователи), вы можете создать дерево цитат и скомпилировать его с помощью компилятора цитат PowerPack.

  • Компиляция будет более эффективной, потому что цитаты компилируются (используя LINQ) в памяти
  • Компиляция поддерживает только ограниченный подмножество полного языка F #
  • Вы должны написать свой собственный анализатор для генерации цитат из пользовательского ввода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...