我已阅读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?谢谢。
我已阅读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?谢谢。
好消息是,目标文件在转换到 2010 后可以工作。
尽管该示例由于依赖关系而无法运行,但您现在可以创建自己的项目并构建自己的词法分析器和解析器。您将遇到的唯一问题是包含了 unistd.h 的使用。添加这个,它不会:
#define YY_NO_UNISTD_H
我认为您可以在 flex & bison 书中获得 2010 年构建解析器所需的其余内容。
这个问题很老,但对于像我这样的 Flex&Bison 新手来说:您可以使用此处提供的“Win flex-bison”工具,它还包含一个教程如何在 MSVS2010+ 中配置 VS C++ 项目
注意:如果链接不起作用,请使用 google 并搜索“Win flex-bison”;-)
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 的程序非常相似。