我已经使用C/lex很长时间了,现在想使用F#/fslex。 我在C#方面相对熟练,并正在学习F#。 唯一的问题是我没有找到任何包含fslex在Visual Studio构建过程中的项目示例或模板。 有人知道我可以在哪里找到吗?
祝好! Volker
我已经使用C/lex很长时间了,现在想使用F#/fslex。 我在C#方面相对熟练,并正在学习F#。 唯一的问题是我没有找到任何包含fslex在Visual Studio构建过程中的项目示例或模板。 有人知道我可以在哪里找到吗?
祝好! Volker
很遗憾,对于.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
文件。
我正在使用免费的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)”。
虽然你可以从 Visual Studio Add-In 添加一个 F# Lex 规范文件,但要运行 fslex,你需要打开命令行。Fslex.exe 位于 F# 发行版的“bin”目录中。
希望这能帮到你。