使用引号和F#Powerpack CodeDOM评估度量单位表达式

时间:2010-10-10 16:56:28

标签: f#

有没有人知道是否可以将包含(测量单位)的f#引用表达式发送到F#CodeDOM(在codeplex powerpack中提供)以便即时编译?

我正在尝试实现的方案是拥有一个运行时组件,允许我在一些文本框中键入一个简单的表达式,然后将其发送到CodeDOM进行编译,或者直接发送到Fsc.exe。总的来说,我想在运行时利用F#编译器来编译一段代码(就像我在C#中使用C#CodeDOM提供程序一样),以便利用度量单位功能。这种事情有可能吗?

1 个答案:

答案 0 :(得分:1)

F#PowerPack中的CodeDOM提供程序使用F#编译器编译生成的源代码,因此它支持整个F#语言,包括度量单位。用于表示代码的CodeDOM对象非常有限,并且它们没有直接表示度量单位的方法。但是,您可以使用CodeSnippetExpression,它允许您将任何文本(字符串)用作CodeDOM树的一部分(生成器只会将文本插入生成的源代码中)。

  • 这应该很简单(实际上,您可以使用CodeSnippetExpression或使用类似的类型(允许整个语句/类型/等)将用户输入的文本传递给CodeDom。
  • 编译是通过调用fsc.exe来完成的,这意味着用户需要安装F#编译器,并且应用程序需要运行其他应用程序的权限。

您还在问题中提到了引文。引号是F#源代码的表示,但没有内置解析器可以从字符串(由用户输入)创建引用。如果您创建了这样的解析器(对于您的用户将要输入的字符串),那么您可以创建引用树并使用引号编译器PowerPack对其进行编译。

  • 编译会更有效,因为引用是在内存中编译(使用LINQ)
  • 编译仅支持完整F#语言的有限子集
  • 您必须编写自己的解析器以根据用户输入生成报价。