我已经使用C/lex很长一段时间了,现在我想使用F#/fslex。在学习F#的过程中,我在C#方面也做得比较好。唯一的问题是,我看不到任何项目示例或模板在Visual Studio构建过程中正确地包含了fslex。有谁知道我在哪里可以找到一个?
许许多多问候!沃尔克
发布于 2010-03-09 00:43:48
不幸的是,没有用于.fsl文件的内置项目模板,因为FsLex是PowerPack的一部分(所以Visual Studio不能期望它会被安装)。如果有一些可以与PowerPack一起安装的模板,那将是非常有用的!
无论如何,如果您正在寻找一个使用FsLex的示例项目(并将.fsl文件作为项目的一部分),那么您可以查看F#源代码(随Visual Studio2008MSI/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-09-06 07:02:36
我一直在使用免费的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-03-08 23:39:21
稍微研究一下,它们看起来需要分开。我在Chris Smith的这篇博客文章( http://blogs.msdn.com/chrsmith/archive/2008/01/18/fslex-Sample.aspx )中找到了以下内容:
虽然您可以从Visual Studio外接程序添加fslex Lex规范文件,但要运行F#,您需要切换到命令行。bin位于您的F#发行版的‘Fslex.exe’目录中。
希望这能有所帮助。
https://stackoverflow.com/questions/2402349
复制相似问题