Below there is the input file for Flex to generate a scanner which is used in Controller, Generator and Validator to scan during opening an Osiris datafile.
%{ #define MAXBUF 1024 #include <gtk/gtk.h> #include <glib.h> #include "main.h" #include "ogener.tab.h" char string_buff[MAXBUF]; %} DIGIT [0-9] INTEGER {DIGIT}+ ID [[:alnum:]._/]* %x text %% char text_buf[MAXBUF]; char *text_buf_ptr; "<?xml version=\"1.0\"?>" {return PREAMBLE;} "<osiris>" {return OSIRISB;} "</osiris>" {return OSIRISE;} "<project>" {return PROJECTB;} "</project>" {return PROJECTE;} "<outputfn>" {return OUTPUTFNB;} "</outputfn>" {return OUTPUTFNE;} "<validator>" {return VALIDATORB;} "</validator>" {return VALIDATORE;} "<generator>" {return GENERATORB;} "</generator>" {return GENERATORE;} "<launcher>" {return LAUNCHERB;} "</launcher>" {return LAUNCHERE;} "<object>" {return OBJECTB;} "</object>" {return OBJECTE;} "<id>" {return IDB;} "</id>" {return IDE;} "<x>" {return XB;} "</x>" {return XE;} "<y>" {return YB;} "</y>" {return YE;} "<width>" {return WIDTHB;} "</width>" {return WIDTHE;} "<height>" {return HEIGHTB;} "</height>" {return HEIGHTE;} "<type>" {return TYPEB;} "</type>" {return TYPEE;} "<cols>" {return COLSB;} "</cols>" {return COLSE;} "<rows>" {return ROWSB;} "</rows>" {return ROWSE;} "<table>" {text_buf_ptr=text_buf; BEGIN(text); return TABLEB;} "</table>" {return TABLEE;} "<connection>" {return CONNECTIONB;} "</connection>" {return CONNECTIONE;} "<lastid>" {return LASTIDB;} "</lastid>" {return LASTIDE;} <text>. {*text_buf_ptr++=yytext[0];} <text>"</table>" {*text_buf_ptr++=0; unput('>'); unput('e'); unput('l'); unput('b'); unput('a'); unput('t'); unput('/'); unput('<'); BEGIN(INITIAL); yylval=text_buf; return STRING;} {INTEGER} {yylval=atoi(yytext) ; return INTEGER;} {ID} {strcpy(string_buff,yytext); yylval=string_buff; return STRING;} [ \t\n]+ /* eat up whitespace */ %%