From b1da71ec72f3d3637b4a3b87751687e69ef5e7f4 Mon Sep 17 00:00:00 2001 From: John Millaway Date: Wed, 15 Feb 2006 18:31:06 +0000 Subject: [PATCH] Transfered bugs list from lex.sf.net to BUGS file. --- BUGS | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ flex.skl | 5 +++- 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 BUGS diff --git a/BUGS b/BUGS new file mode 100644 index 0000000..bf2752d --- /dev/null +++ b/BUGS @@ -0,0 +1,89 @@ +This is a list of bugs still in the queue at lex.sf.net at the time we closed +out the project. + +------------------------------------------------------------- + +Some strict compilers warn about a few internal flex variables signedness. They +are bogus warnings and can be ignored, but people send in reports nonethless. + +------------------------------------------------------------- + +The initializer of the yy_transition array in the +generated scanner +contains fewer entries than the declared size of the array. + +Examples include yy_transition[6504] with 6250 entries, +yy_transition[13215] with 12961 entries. This looks +like it +is always 254 fewer entries than the declared size. + +This bug is present in flex 2.5.4a as well. It appears to be harmless. + +------------------------------------------------------------- +The examples in the chapter "Generating C++ Scanners" +contain suspicious code. Attached is a patch that +corrects this, and after these +modifications this example compiles and works. + +------------------------------------------------------------- + +C++ scanners derived from the yyFlexLexer base class +will not compile with flex-2.5.31 because the +<FlexLexer.h> automatically gets included into the +scanner twice. Because yyFlexLexer is now defined by +default even if no prefix is specified, including +FlexLexer.h twice causes the class yyFlexLexer to be +declared twice. In flex-2.5.4 because yyFlexLexer was +not defined by flex in the scanner code, including +FlexLexer.h more than once only declared yyFlexLexer +once. I appreciate that this is because of the M4 +additions to flex, but I can not find a way to stop +flex defining yyFlexLexer if it is not needed. + +Here is an example of a class that will not compile: + +derived_lexer.h: + +#ifndef __derived_lexer__ +#define __derived_lexer__ + +#include <FlexLexer.h> + +class derived_lexer : public yyFlexLexer +{ +public: +derived_lexer(std::istream* arg_yyin = 0) : +yyFlexLexer(arg_yyin){} +int yylex(); +int x; +}; +#endif + +derived_lexer.l: + +%{ +#include "derived_lexer.h" +%} + +%option yyclass="derived_lexer" + +%% +[0-9]+ { +x = atoi(yytext); +} +%% + +main.cpp: + +#include "derived_lexer.h" +#include <fstream> + +int main() +{ +std::ifstream input; +input.open("input"); +derived_lexer lexer(&input); +lexer.yylex(); +} + +------------------------------------------------------------- diff --git a/flex.skl b/flex.skl index 7f32501..32c65d2 100644 --- a/flex.skl +++ b/flex.skl @@ -82,7 +82,10 @@ m4preproc_define(`M4_GEN_PREFIX', %if-c++-only /* The c++ scanner is a mess. The FlexLexer.h header file relies on the - * following macro. + * following macro. This is required in order to pass the c++-multiple-scanners + * test in the regression suite. We get reports that it breaks inheritance. + * We will address this in a future release of flex, or omit the C++ scanner + * altogether. */ #define yyFlexLexer M4_YY_PREFIX[[FlexLexer]] %endif -- 2.40.0