Een ingewikkelder voorbeeld voor een C-achtige syntaxLaten we zeggen dat we een bestand willen parsen dat er zo uitziet:
logging {
category lame-servers { null; };
category cname { null; };
};
zone "." {
type hint;
file "/etc/bind/db.root";
};We herkennen duidelijk een aantal categorieën (tokens) in dit
bestand:
WOORDen, zoals `zone' en `type' BESTANDSNAAMen, zoals `etc/bind/db.root' QUOTEs, zoals om de bestandsnaam OBRACEs, { EBRACEs, } PUNTKOMMAs, ;Het overeenkomstige Lex bestand is Voorbeeld 3:
%{
#include <stdio.h>
%}
%%
[a-zA-Z][a-zA-Z0-9]* printf("WOORD ");
[a-zA-Z0-9\/.-]+ printf("BESTANDSNAAM ");
\" printf("QUOTE ");
\{ printf("OBRACE ");
\} printf("EBRACE ");
; printf("PUNTKOMMA ");
\n printf("\n");
[ \t]+ /* negeer whitespace */;
%%
Als we ons bestand aan het programma toevoeren dat door dit Lex bestand
gegenereerd is (met gebruik van example3.compile) krijgen we:WOORD OBRACE
WOORD BESTANDSNAAM OBRACE WOORD PUNTKOMMA EBRACE PUNTKOMMA
WOORD WOORD OBRACE WOORD PUNTKOMMA EBRACE PUNTKOMMA
EBRACE PUNTKOMMA
WOORD QUOTE BESTANDSNAAM QUOTE OBRACE
WOORD WOORD PUNTKOMMA
WOORD QUOTE BESTANDSNAAM QUOTE PUNTKOMMA
EBRACE PUNTKOMMA Als we dit vergelijken met het bovengenoemde configuratiebestand, wordt
duidelijk dat we het netjes `getokeniseerd' hebben. Ieder deel van het
configuratiebestand is gematcht, en omgezet naar een token.