2010-03-08 119 views
5

我一直使用C /法很长一段时间了,很想现在使用F#/ fslex。 我在C#和学习F#的过程中都比较好。 唯一的问题是,我看不到任何项目示例或模板,其中fslex已正确包含在Visual Studio构建过程中。 有谁知道我在哪里可以找到一个?FSLex示例解决方案?

许多问候的! 沃尔克

回答

2

做了一些研究,它看起来像他们需要的是独立的。我发现在这个博客帖子(http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx)由克里斯·史密斯如下:

虽然可以从Visual Studio插件添加F#莱克斯规范文件,运行fslex你将需要打破在命令行。 Fslex.exe位于您的F#发行版的“bin”目录中。

希望有所帮助。

+0

嗯,我明白了。 我希望有一个.fsl文件的项目模板与关联的构建步骤等。 无论如何,我会首先获得VS2010版本,然后看看我能得到多少。 – Volker 2010-03-08 15:44:24

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文件。

3

我使用的是免费VS壳牌,直到我终于威胁自己不够,最终购买完整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)。

+0

这当然有效,但我希望有正确的整合,VS正确地找出依赖关系。 – 2010-09-14 21:40:35

相关问题