我正在尝试使用flex生成c ++扫描程序,下面是flex和g ++打印出来的消息。
|| flex -o step1_noinc.cpp --c++ --yyclass=step1_noinc step1_noinc.lex
|| g++ -c step1_noinc.cpp
step1_noinc.cpp|345 col 21| error: ‘step1_noinc’ has not been declared
|| #define YY_DECL int step1_noinc::yylex()
它说类名尚未声明,那是怎么回事?
我尽可能简化我的lex代码,如下所示,以简化调试:
%%
<*>\n {
}
%%
答案 0 :(得分:1)
是的,您可以自定义该类。
来自flex manual:
- yyclass = NAME,%option yyclass =“NAME”
仅适用于生成C ++扫描程序(
--c++
选项)。它通知flex 你派生NAME
作为yyFlexLexer
的子类...(强调添加)
请注意在该句中使用“你”一词。 Flex始终定义yyFlexLexer
类(可能更改yy
前缀),但如果项目中有多个不同的类似扫描程序,它还允许您进行子类化。
除了更改前缀yy
之外,据我所知你无法修改flex生成的类的名称。