FSLex示例解决方案?

时间:2010-03-08 15:24:48

标签: visual-studio f# fslex

我一直在使用C / lex很长时间,现在想使用F#/ fslex。 我在C#和学习F#的过程中相对富裕。 唯一的事情是我看不到任何项目示例或模板,其中fslex正确包含在Visual Studio构建过程中。 有谁知道我在哪里找到一个?

很多问候! 沃尔克

3 个答案:

答案 0 :(得分: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文件时建设项目。

答案 1 :(得分: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)。

答案 2 :(得分:2)

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

  

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

希望有所帮助。