gpt4 book ai didi

msbuild - 在 Vs2013 中使用 FsLex/Yacc

转载 作者:行者123 更新时间:2023-12-04 17:35:42 26 4
gpt4 key购买 nike

我正在尝试恢复我在 vs 2008 中工作的旧 f# 解析器项目,以便与 2013 一起使用。它使用 FsLexYacc。

我通过使用预构建步骤使其构建正常:

fslex --unicode "$(ProjectDir)XpathLexer.fsl"
fsyacc --module XpathParser "$(ProjectDir)XpathParser.fsy"

但这并不理想,因为无论输入是否发生变化,它总是会执行。

然后我尝试只使用旧的 MsBuild 操作:
<FsYacc Include="XpathParser.fsy">
<FsLex Include="XpathLexer.fsl">

但这些似乎在构建过程中被完全忽略了。那正确吗?这些构建任务是否以某种方式被删除了?

然后我发现了一些在 vs C++ 下记录的我认为可能有用的东西:
<CustomBuild Include="XpathParser.fsy">
<Message>Calling FsYacc</Message>
<Command>fsyacc --module XpathParser "$(ProjectDir)XpathParser.fsy"</Command>
<Outputs>$(ProjectDir)XpathParser.fs</Outputs>
</CustomBuild>


<PropertyGroup>
<CustomBuildBeforeTargets>CoreCompile</CustomBuildBeforeTargets>
</PropertyGroup>

(我检查了 Microsoft.Fsharp.Targets 文件以提出“CoreCompile”目标。)

唉,还是没有雪茄。

是否有人能够阐明是否确实可以将 fslex/yacc 正确集成到 vs 2013 解决方案中,如果是,如何?

最佳答案

我不认为这些工具默认包含在随 Visual Studio 一起安装的 F# 编译器中,因此这些任务不存在。我对 Visual Studio 2012 项目执行了以下操作,但我希望它在 VS 2013 中会类似。以下是我必须遵循的步骤:

  • 从 nuget 安装 FSharp.Powerpack。这有 fslex 和 fsyacc 工具以及构建任务和目标。
  • 卸载项目并编辑 .fsproj 文件。
  • 为 FSharp.Powerpack.target 文件添加导入语句。这将添加 CallFsLexCallFsYacc建立目标。我在为 Microsoft.FSharp.targets 导入后添加了这个:
    <Import Project="$(ProjectDir)\..\packages\FSPowerPack.Community.3.0.0.0\Tools\FSharp.PowerPack.targets" />
  • 将这三个属性添加到文件顶部的主 PropertyGroup:<FsYaccToolPath>..\packages\FSPowerPack.Community.3.0.0.0\Tools</FsYaccToolPath>
    <FsLexToolPath>..\packages\FSPowerPack.Community.3.0.0.0\Tools</FsLexToolPath>
    <FsLexUnicode>true</FsLexUnicode>
    这告诉构建任务在哪里可以找到必要的工具并为 fslex 设置 unicode 选项。
  • 要使用我们导入的目标,您需要使用要使用的输入文件定义 FsLex 和 FsYacc 项目组。您还需要为输出 .fs 文件添加 Compile 项。你最终会在 ItemGroup 部分得到这样的东西:<Compile Include="Sql.fs" />

    <FsYacc Include="SqlParser.fsp">

    <Module>SqlParser</Module>

    </FsYacc>

    <Compile Include="SqlParser.fsi" />

    <Compile Include="SqlParser.fs" />

    <FsLex Include="SqlLexer.fsl" />

    <Compile Include="SqlLexer.fs" />

  • 您可以通过引用 FSharp.Powerpack.Build.Tasks.dll 直接使用 FsLex 和 FsYacc 构建任务,但对我来说这更容易上手。

    关于msbuild - 在 Vs2013 中使用 FsLex/Yacc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19781156/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com