Allpool toodud programminäide on esitatud programmeerimiskeele ADA süntaksis.
Defineerime algul kõik tarvisminevad andmetüübid; ADA sisseehitatud funtsiooni "in" abil võimaldavad need hiljem lihtsalt kontrollida, et lähteteksti sümbol on korrektne. ADA loetlustüübi definitsioon koosneb lihtsalt sellise tüübiga muutuja kõigi lubatud väärtuste loetelust; alamtüübi definitsioonis näitatakse baastüübi (loetlustüüp) esimene ja viimane element; -- on kommentaari algus:
type SYMBOL is (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, z, t, u, v, w, õ, ä, ü, x, y, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, Z, T, U, V, W, Õ, Ä, Ö, Ü, X, Y, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, *, /, ^, ;, :, ., =, (, ),
subtype LETTER is SYMBOL range a..Y;
subtype DIGIT is SYMBOL range 0..9;
subtype MÄRK is SYMBOL range +..CRLF;
subtype OP is SYMBOL range +..^;
, CRLF);
Et sisendtekstis esinevaid vigu paigaldada, on tarvis andmetüüpi, mis võimaldab kirjeldada sisendteksti sümbolite asukohta:
type textposition is record
end record;
Vea korral salvestatakse veakood ja selle esinemiskoht:
type ERROR is record
end record;
Vead salvestatakse ja teatatakse kasutajale alles kogu analüüsi lõppedes (s.t. programm püüab sisendtekstis vea leidmisel tööd jätkata):
ERRORLIST: array 1..ERRORMAX of ERROR
-- ERRORMAX on maksimaalne lubatud vigade arv sisendtekstis
Protseduur READ annab globaalse muutuja CH väärtuseks sisendteksti järgmise sümboli ja muutuja POSITION väärtuseks saab selle asukoht lähtetekstis:
procedure READ(
Protseduur
RECORD_ERROR salvestab vea koodi ja asukoha:
procedure RECORD_ERROR(
Kasutades alamprotseduure WORD, NUMBER, ERALDAJA (need vastavad alamautomaatidele, mis kirjeldavad vastavalt identifikaatoreid, arve ja eraldajaid) võib kogu leksikat tunnistava (kontrolliva) programmi kirjutada täpses vastavuses leksikat defineeriva grammatika struktuuriga:
procedure SCAN(SISEND: in FILE) is
procedure WORD is
procedure NUMBER is
procedure ERALDAJA is
--
(ERALDAJA | IDENT ERALDAJA | CONST ERALDAJA )*
WORD;ERALDAJA;
NUMBER;ERALDAJA;
ERALDAJA;
end loop;
if CH='#' then ACCEPT
else
RECORD_ERROR(0,POSITION)
-- veakood 0: lubamatu sümbol
end SCAN;
--
(ERALDAJA | IDENT ERALDAJA | CONST ERALDAJA )*
end WORD;
end NUMBER;
READ;
READ;
end ERALDAJA;