The gml4gtk program is using flex to generate C source lexer code with the mkpl script.

The flex software is now on github at

The newest manual is here at
or in this file at flex.html

For C++ there is also a flex compatible tool at

The generated source C code does not create issues using valgrind or gcc-11 software
which means that the C code is of excellent quality.

It is possible to use own skeleton with flex with more fine tuning.

Using the flex lexer with memory wrappers and these options like this:

/* own yyalloc */
void *yyalloc (size_t n)

void yyfree (void *ptr)
  dp_free (ptr);

void *yyrealloc (void *ptr, size_t n)
  return (dp_realloc (ptr,n));


/* use own yyalloc */
%option noyyalloc
%option noyyfree
%option noyyrealloc

    /* no yywrap() at end-of-file */
%option noyywrap

    /* do not push back chars in stream function() */
%option nounput

    /* no input() function */
%option noinput

    /* input does not come from a tty. */
%option never-interactive

    /* no yywrap() at end of file */
%option noyywrap

    /* 8-bits scanner */
%option 8bit

    /* use nameprefix for routines */
%option prefix="hl"

    /* add debug output */
%option debug

    /* use clib to read data */
%option noread

Flex does not generate graph data but maybe something is possible.

And flex can be used with own customized skeletons using the -S option like this:
flex -Smyflex.skl input.l

To create myflex.skl, go to the source src directory of flex lexer tool 2.6.4 with flex.skl file.

Then use this sed command to generate myflex.skl:

sed 's/m4_/m4postproc_/g; s/m4preproc_/m4_/g' flex.skl | m4 -P -DFLEX_MAJOR_VERSION=2 -DFLEX_MINOR_VERSION=6 -DFLEX_SUBMINOR_VERSION=4 | sed 's/m4postproc_/m4_/g' > myflex.skl

The myflex.skl can be edited with some care because it is a mix of C, C++ and m4 language.

The ready-to-use skeleton for flex-2.6.4 lexer is here as text file in flex-2.6.4.skl.txt

The ready-to-use skeleton for flex-2.5.37 lexer is here as text file in flex-2.5.37.skl.txt