12

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

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

4

3 回答 3

3

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

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

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

#define YY_NO_UNISTD_H 

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

于 2011-05-18T17:59:39.540 回答
1

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

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

于 2014-10-12T08:12:41.883 回答
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 $(InputPath)

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

在哪里:

描述实际上是您想要使用的任何内容

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

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

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

Bison 的程序非常相似。

于 2017-04-14T20:13:09.367 回答