我已经使用 C/lex 很长时间了,现在想使用 F#/fslex。我在 C# 和学习 F# 的过程中相当不错。唯一的问题是我看不到任何项目示例或模板,其中 fslex 正确包含在 Visual Studio 构建过程中。有谁知道我在哪里可以找到一个?
很多问候!沃尔克
我已经使用 C/lex 很长时间了,现在想使用 F#/fslex。我在 C# 和学习 F# 的过程中相当不错。唯一的问题是我看不到任何项目示例或模板,其中 fslex 正确包含在 Visual Studio 构建过程中。有谁知道我在哪里可以找到一个?
很多问候!沃尔克
不幸的是,没有 .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
在构建项目时包含生成的文件。
我一直在使用免费的 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)。
做一些研究,看起来他们需要分开。我在Chris Smith的这篇博文 ( http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx ) 中找到了以下内容:
虽然您可以从 Visual Studio 加载项添加 F# Lex 规范文件,但要运行 fslex,您需要中断到命令行。Fslex.exe 位于 F# 发行版的“bin”目录中。
希望有帮助。