flex没有生成yyFlexLexer.h头

时间:2012-11-13 19:39:30

标签: c++ c flex-lexer flex++

我在使用flex创建词法分析器之前编写了几个解析器,但这次我想要flex来生成Lexer类而不是经典的C文件,即我想要flex来生成C ++扫描器类......问题是它没有为我生成yyFlexLexer.h,只有lex.yy.cc

我已经阅读了the Flex manual C++ chapter ...所以idk该怎么做...我的flex for windows是不是没有正常工作?

这些是我目前正在使用的弹性选项:

%option outfile="cmdsLexer.cpp"
%option stdinit
%option case-insensitive
%option c++

%{
    #include "global-scope.h"
%}

ANDIGIT     [a-zA-Z0-9]
IDNTIFIER   [a-zA-Z_]({ANDIGIT}|_|-)*
INTEGER     [-+]?[0-9]+
STRING      \"[^\n\"]*\"
....

1 个答案:

答案 0 :(得分:3)

没有yyFlexLexer.h个文件。相反,cmdsLexer.cpp文件将包含一行

#include <FlexLexer.h>

请注意使用斜角括号而不是双引号。此文件应安装在您的系统上,例如为/usr/include/FlexLexer.h。每个词法分析器都是一样的。对于Windows,路径显然会有所不同。只需在flex安装中找到该文件,然后将其添加到编译器搜索头文件的路径中,例如使用-I选项gcc。

另请注意the document you referenced的最后一段,以便高级使用该标题:

  

如果要创建多个(不同的)词法分析器类,请使用   “-P”标记(或prefix=选项)将每个yyFlexLexer重命名为某个   其他'xxFlexLexer'。然后,您可以在其他人中添加<FlexLexer.h>   每个词法分析器类一次,首先重命名yyFlexLexer如下:

     #undef yyFlexLexer
     #define yyFlexLexer xxFlexLexer
     #include <FlexLexer.h>

     #undef yyFlexLexer
     #define yyFlexLexer zzFlexLexer
     #include <FlexLexer.h>
     例如,如果您将%option prefix="xx"用于其中一台扫描仪,则

  和另一个%option prefix="zz"