mirror of
https://github.com/westes/flex.git
synced 2026-01-27 18:04:36 +00:00
108 lines
2.8 KiB
Plaintext
108 lines
2.8 KiB
Plaintext
This is a list of bugs still in the queue at lex.sf.net at the time we closed
|
|
out the project and moved it to flex.sf.net.
|
|
|
|
-------------------------------------------------------------
|
|
|
|
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();
|
|
}
|
|
|
|
-------------------------------------------------------------
|
|
|
|
Hi, the anomally is that if I generate a c++ parser it will not make
|
|
yy_scan_buffer and friends.
|
|
this is happenning on flex version 2.5.4.
|
|
Is this the intent, if so how do I make a c++ parser read from my buffer?
|
|
|
|
P.S. in c++ it will only generate:
|
|
#ifndef YY_NO_SCAN_BUFFER
|
|
#endif
|
|
|
|
|
|
#ifndef YY_NO_SCAN_STRING
|
|
#endif
|
|
|
|
|
|
#ifndef YY_NO_SCAN_BYTES
|
|
#endif
|
|
-------------------------------------------------------------
|