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.