Parsers zijn programma's die een tekstfile inlezen, of die een invoer via het toetsenbord inlezen. Deze tekst moet voldoen aan een door de programmeur gedefinieerde grammatica. Compilers en interpreters zijn voorbeelden van parsers. Een C-compiler controleert de brontekst volgens de grammatica van C. Klopt de grammatica van een gegeven tekst, dan wordt het vertaald naar object-code, of het wordt tegelijkertijd vertaald. Dat wordt gelinkt met libraries en vervolgens krijgt men een programma dat werkt. Klopt het niet, dan resulteert dat in een foutmelding.
Een eenvoudige rekensommetje zoals 1 + 2 * 5 / 3 heeft ook een zekere grammatica. Strikt genomen is het een soort taal die wiskundigen begrijpen.
Maar hoe is die taal gedefinieerd? Het bovenstaande is een expressie. Een expressie bestaat uit een of meerdere termen gescheiden door minnen en plussen. Een term bestaat uit een of meerdere factoren, gescheiden door maaltekens (een *) en deeltekens (een /). Je kunt er een soort schematische definitie van maken:
expressie ::= term | expressie '+' term | expressie '-' term;
term ::= factor | term '*' factor | term '/' factor;
factor ::= getal | '(' expressie ')';
getal ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
Nu blijken er twee programma's te zijn die hiervoor gebruikt worden: yacc en lex.
Wie programmeert weleens dit soort dingen?