flex has the ability to generate a reentrant C scanner. This is
accomplished by specifying
%option reentrant (‘-R’) The generated
scanner is both portable, and safe to use in one or more separate threads of
control. The most common use for reentrant scanners is from within
multi-threaded applications. Any thread may create and execute a reentrant
flex scanner without the need for synchronization with other threads.