FSLex示例解决方案?

5

我已经使用C/lex很长时间了,现在想使用F#/fslex。 我在C#方面相对熟练,并正在学习F#。 唯一的问题是我没有找到任何包含fslex在Visual Studio构建过程中的项目示例或模板。 有人知道我可以在哪里找到吗?

祝好! Volker

3个回答

10

很遗憾,对于.fsl文件,Visual Studio没有内置的项模板,因为FsLex是PowerPack的一部分(所以Visual Studio不能期望它已经安装)。有一个可随PowerPack一起安装的模板肯定会非常有用!

无论如何,如果你正在寻找一个使用FsLex(并将.fsl文件作为项目的一部分)的示例项目,那么你可以查看F#源代码(随Visual Studio 2008 MSI/ZIP软件包分发)。包含.fsl的项目是FSharp.Compiler.fsproj,在我的安装中,可以在C:\Programs Files\FSharp-1.9.9.9\source\fsharp\FSharp.Compiler中找到。令人惊讶的是,它甚至包括了F#语言的词法分析器 :-).

要将FsLex项目添加到MSBUILD项目(也是Visual Studio项目),可以使用以下方法:

<FsLex Include="..\lex.fsl">
  <OtherFlags>--lexlib Internal.Utilities.Text.Lexing</OtherFlags>
  <Link>lex.fsl</Link>
</FsLex>
<Compile Include="lex.fs" />

如果你也需要 FsYacc,这里有一个例子(也来自于FSharp.Compiler.fsproj):

<FsYacc Include="..\pars.fsy">
  <Module>Microsoft.FSharp.Compiler.Parser</Module>
  <Open>Microsoft.FSharp.Compiler</Open>
  <OtherFlags>--internal --lexlib Internal.Utilities.Text.Lexing 
              --parslib Internal.Utilities.Text.Parsing</OtherFlags>
  <Link>pars.fsy</Link>
</FsYacc>
<Compile Include="pars.fs" />

请注意,您需要使用FsYacc/FsLex命令来调用自定义工具,但还需要使用Compile命令告诉编译器在构建项目时包含生成的fs文件。


3

我正在使用免费的VS Shell,直到我威胁自己最终购买完整版的VS。除非我做错了什么(很可能是),否则常规解决方案对我都不起作用。我所做的是将以下预构建事件添加到项目属性:

"C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\fslex.exe"  "$(ProjectDir)\Lexer.fsl"
"C:\Program Files (x86)\FSharpPowerPack-2.0.0.0\bin\fsyacc.exe" "$(ProjectDir)\Parser.fsy" --module Parser

对我来说,这似乎工作得很好。错误信息都会显示在输出窗口中。如果你使用的是32位机器,那么你需要从这些路径中删除“(x86)”。


这肯定是有效的,尽管我希望有适当的集成,让VS正确地找出依赖关系。 - Alexander Rautenberg

2
通过一些研究,看起来它们需要分开。我在 Chris Smith 的博客文章中找到了以下内容(http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx):

虽然你可以从 Visual Studio Add-In 添加一个 F# Lex 规范文件,但要运行 fslex,你需要打开命令行。Fslex.exe 位于 F# 发行版的“bin”目录中。

希望这能帮到你。


嗯,我明白了。 我希望有一个.fsl文件的项目模板,带有相关的构建步骤等等。 无论如何,谢谢,我会先获取VS2010版本,然后看看能做到什么程度。 - Volker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接