Při kombinátorovém vytváření parserů všechny tyto fáze zpravidla téměř splývají. Podúlohy strukturální analýzy textu zde tvoří nedělitelný celek a omezená sémantická analýza může být prováděna pomocí mutátoru aplikace sémantické operace rovněž již za běhu parseru.
V této kapitole se budeme věnovat prostředkům a způsobům transformace syntaktických stromů vydávaných parsery.
Zastavme se nejprve na chvíli u parserů terminálních symbolů. Všechny
dosud zavedené parsery z této kategorie vydávají svůj výsledek
v reprezentacích používajících ASCII kódy symbolů. Například
symbol
vydává ASCII kód akceptovaného znaku a token
řetězec -- tedy prologovský seznam ASCII kódů. Pro další zpracování
je však v některých situacích výhodnější vydávat výsledky ve formě
atomů, například v případě scannerů tj. lexikálních analyzátorů
trasformujících vstup na posloupnost tokenů.
Proto knihovna obsahuje varianty všech parserů terminálních symbolů,
které vydávají svůj výsledek ve formě atomů. Jsou odlišeny připojením
znaku 'A'
za název původního parseru, například:
symbolA(S,W):- W :-> (fulfil(==(S)) <@ ascii2Atom). tokenA(String,W):- W :-> (token(String) <@ string2Atom).Při používání těchto parserů v dalším textu se ke způsobu jejich zavedení již nebudeme vracet.
V dalších dvou částech se budeme věnovat mutátoru aplikace sémantické operace a predikátům s ním spojených.