To: "Bart Niswonger" <NISWONGR@almaden.ibm.com>
Subject: Re: flex 2.5: c++ scanners & start conditions
In-reply-to: Your message of Tue, 06 Jan 1998 10:34:21 PST.
Date: Tue, 06 Jan 1998 19:19:30 PST
From: Vern Paxson <vern>
> The problem is that when I do this (using %option c++) start
> conditions seem to not apply.
The BEGIN macro modifies the yy_start variable. For C scanners, this
is a static with scope visible through the whole file. For C++ scanners,
it's a member variable, so it only has visible scope within a member
function. Your lexbegin() routine is not a member function when you
build a C++ scanner, so it's not modifying the correct yy_start. The
diagnostic that indicates this is that you found you needed to add
a declaration of yy_start in order to get your scanner to compile when
using C++; instead, the correct fix is to make lexbegin() a member
function (by deriving from yyFlexLexer).