Allpoolesitatud näide on veel väga primitiivne, näiteks puudub siin kontroll, kas programmi tekstist leitud identifikaator juba ei esine tabelis (see tuleks enne uue nime lisamist kindlasti teha); samuti ei genereerita siin veel mingit väljundit (skaneerimise tulemusena saadavat lekseemide jada), kuid arvud (täis- ja reaalarvud) muudetakse juba arvudeks (lähtetekstis on nad sümbolite jadad) ja kahesümboliline omistusmärk := asendatakse ühe lekseemiga, kusjuures ':', '=' võivad esineda ka tavaliste eraldajatena. OMISTUS.
%option noyywrap
DIGIT [0-9]
%%
{DIGIT}+ {
{DIGIT}+"."{DIGIT}* {
if|then|begin|end|procedure|function|main|else {
{ID} {
"+"|"-"|"*"|"/" printf( "An operator: %s\n", yytext );
[ \t\n]+ /* eat up whitespace */
{OMISTUS} printf("Omistamine: %s\n",yytext);
{ERALDAJA} printf("Eraldaja: %s\n", yytext);
%%
main( argc, argv )
printf("Identifikaatorieid: %d\n", n);
/* scanner for a toy Pascal-like language */
%{
/* include is to get the atof(), atoi() functions */
#include <math.h>
int num;
int i,j,k,n=0;
float realnum;
char c, nimed[50][10];
/* nametable; < 50 names are allowed in a program */
%}
ID [a-z][a-z0-9]*
OMISTUS :=
ERALDAJA [=,;:"("")""{""}"]
num=atoi(yytext);
printf( "An integer: %s (%d)\n", yytext, num );
}
realnum=atof(yytext);
printf( "A float: %s (%g)\n", yytext, realnum );
}
printf( "A keyword: %s\n", yytext );
}
printf( "An identifier: %s\n", yytext);
/* here should be first a check - */
/* maybe the ident is already in the table! */
for (i=0;i < yyleng;i++ )
nimed[n][i] = yytext[i];
nimed[n][yyleng]=0x00;
/* 0x00 - string terminator! */
n++;
}
"{"[^}\n]*"}" /* eat up one-line comments */
. printf( "Unrecognized character: %s\n", yytext );
int argc;
char **argv;
{
++argv, --argc; /* skip over program name */
if ( argc > 0 )
yyin = fopen( argv[0], "r" );
else
yyin = stdin;
yylex();
for (i=0;i < n;i++)
{
k = 0;
c = nimed[i][k];
while (c != 0x00)
{
printf ("%c", c);
k++;
c = nimed[i][k];
};
printf("\n");
}
}
Selle teksti testimiseks (kui DOS-aknas oletuskataloog on FLEX-i programmi sisaldav kataloog \bin, see tekst on salvestatud failis pascal.lex ja selles kataloogis on ka Pascal-programmi näidis pastxt.pas) tuleb anda käsud:
Programmi töö tulemusega võib nüüd tutvuda käsuga
1. Lisa eelnevasse kontroll, mis välistab juba tabelis oleva identifikaatori teistkordse lisamise.
2. Faili passcan.txt sisu sarnaneb juba "päris" skanneri poolt tehtava väljundi, s.t. lekseemide jadaga. Täienda ylalesitatud FLEX-i programmi nii, et passcan.txt tuleks sisendprogrammile (ülal pastxt.pas) vastav lekseemide jada. Lekseemid on kõik kolmeväljalised kirjed.