5

我已经使用 C/lex 很长时间了,现在想使用 F#/fslex。我在 C# 和学习 F# 的过程中相当不错。唯一的问题是我看不到任何项目示例或模板,其中 fslex 正确包含在 Visual Studio 构建过程中。有谁知道我在哪里可以找到一个?

很多问候!沃尔克

4

3 回答 3

10

不幸的是,没有 .fsl 文件的内置项模板,因为 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在构建项目时包含生成的文件。

于 2010-03-08T16:43:48.100 回答
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)。

于 2010-09-05T23:02:36.073 回答
2

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

虽然您可以从 Visual Studio 加载项添加 F# Lex 规范文件,但要运行 fslex,您需要中断到命令行。Fslex.exe 位于 F# 发行版的“bin”目录中。

希望有帮助。

于 2010-03-08T15:39:21.040 回答