类名未在flex c ++ scanner

时间:2015-12-28 03:45:54

标签: c++ flex-lexer

我正在尝试使用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 {
}

%%

1 个答案:

答案 0 :(得分:1)

是的,您可以自定义该类。

来自flex manual

  

- yyclass = NAME,%option yyclass =“NAME”

     

仅适用于生成C ++扫描程序(--c++选项)。它通知flex 派生NAME作为yyFlexLexer的子类...(强调添加)

请注意在该句中使用“你”一词。 Flex始终定义yyFlexLexer类(可能更改yy前缀),但如果项目中有多个不同的类似扫描程序,它还允许您进行子类化。

除了更改前缀yy之外,据我所知你无法修改flex生成的类的名称。