【问题标题】:How can I use flex & bison in Visual Studio 2010?如何在 Visual Studio 2010 中使用 flex 和 bison?
【发布时间】:2011-08-17 14:59:16
【问题描述】:

我已阅读http://msdn.microsoft.com/en-us/library/aa730877%28vs.80%29.aspx,但此文档适用于 VS 2005。我坚持文档中的“在 Visual C++ 中导入 .rules 文件”部分。 VS 2010 似乎不支持 .rules 文件,相反,它似乎使用 .targets 文件来自定义构建规则。

有人知道如何在 VS 2010 中使用 flex 和 bison 吗?谢谢。

【问题讨论】:

  • 基于我对这个问题的困惑;我认为您打算用 gnu-flex 标记它;不是 Adob​​e Flex。我继续并重新标记它。
  • 感谢您重新标记,www.Flextras.com。但似乎没有人知道我的问题的答案。 :-p 我必须安装 VS 2005 吗?
  • 2010 之前的 Visual C++ 版本使用 VCBuild 构建系统; Visual C++ 2010 移至 MSBuild 系统。目标/规则/属性都完全不同。我确信您可以在 Visual C++ 2010 中使用 Flex 和 Bison,但除非有人已经组装并发布了新的配置说明,否则可能需要大量工作(并且可能对 MSBuild 有相当好的理解)。

标签: visual-c++ bison visual-c++-2010 flex-lexer


【解决方案1】:

Jarda 指定的自定义构建规则是最简单的。以下是自定义构建规则的替代方法。

不要使用预编译的头文件,除非你知道如何使用它们来达到这个目的。在我关闭使用预编译头文件之前,我遇到了抱怨宏重新定义和文件过早结束的问题。

生成一个“Win32 控制台应用程序”并使其成为一个空项目(不生成源代码)。例如,我使用“SimpleFlex”作为我的项目名称。

可选:您可以自定义 VS 文件夹的过滤器,以便 Flex 输入文件显示在 Source Files 文件夹中。在 Source Files 文件夹的属性中,将扩展名(“l”或“lex”)添加到扩展名列表中。

然后为项目创建一个扩展名为“l”(或“lex”)的文件;例如,“SimpleFlex.l”。在文件中,使用下面的示例之一。然后在项目设置中,创建一个自定义构建步骤。如果您不熟悉自定义构建,请在项目设置中查找“自定义构建步骤”选项卡。将以下内容用于自定义构建步骤:

说明:生成词法分析器

命令:C:\Software\FLEX252\flex.exe -o$(ProjDir)\$(InputName).cpp $(输入路径)

输出:$(ProjDir)\$(InputName).cpp

地点:

描述其实就是你想用的任何东西

命令 由 Flex 的路径、输出文件和输入文件组成。您需要将 Flex 的路径更改为适合您系统的路径。

输出指定输出文件的文件名。

在为创建自定义构建步骤的 Flex 输入文件提供代码后,编译该文件。您可以使用 Ctrl-F7 来编译。实际上,此时,您可以构建项目;除了生成扫描仪(cpp 文件)之外,构建没有什么可做的。自定义构建应该执行 Flex,但您知道它执行的唯一方法是因为描述显示在构建输出中。 cpp 文件应该已经生成,然后可以添加到项目中。如果您遇到我上面描述的错误(宏重新定义和文件过早结束),请关闭项目的预编译头文件。

Bison 的过程非常相似。

【讨论】:

    【解决方案2】:

    这个问题很老,但对于像我这样的 Flex&Bison 新手来说:你可以使用here 提供的“Win flex-bison”工具,它还包含一个如何在 MSVS2010+ 中配置 VS C++ 项目的教程

    注意:如果链接无效,请使用 google 并搜索“Win flex-bison”;-)

    【讨论】:

    • Flex 和 Bison 正在迁移到 GitHub,但我不知道特殊的 Windows 版本在 GitHub 中的位置。它们仍然存在于 SourceForge 并在 VS 2015 中工作,我希望它们也能在 VS 2017 中工作或有人转换它们。
    【解决方案3】:

    好消息是,目标文件在转换到 2010 后可以工作。

    • 安装示例。用 vs2010 转换器打开它,它会将 2005 *.rules 转换为 2010 *.targets、*.props 和 *.xml 文件
    • 安装 cygwin,并包含 flex 及其源代码、Bison 及其源代码
    • 将 cygwin 路径添加到可执行路径列表的末尾,将源路径添加到包含路径列表的末尾

    尽管该示例由于依赖关系而无法运行,但您现在可以创建自己的项目并构建自己的词法分析器和解析器。您将遇到的唯一问题是包含了 unistd.h 的使用。添加这个,它不会:

    #define YY_NO_UNISTD_H 
    

    我认为您可以在 flex & bison 书籍中获得 2010 年构建解析器所需的其余内容。

    【讨论】:

    • 唯一的问题是捕获输出不起作用。它仅向您显示触发了 bison 和 flex 以及错误代码(如果有)。不过,我正在努力解决这个问题,并且很可能会将新的构建目标文件放在我的博客上,并附上有关设置的适当教程。
    • 您不需要 Cygwin 在 Windows 中使用 Flex 和 Bison,甚至在 Visual Studio 中也不需要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    相关资源
    最近更新 更多