我在使用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\"]*\"
....
答案 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"
。