<@
, predikáty reprezentující tyto operace
mají rozhraní:
kde jsou argumenty specifikované přímo při použití v mutátoru aplikace sémantické operace:
<@
je argument tvořený výsledkem přicházejícím z parseru a je
výsledek operace .
V následujících odstavcích bude uveden přehled nejdůležitějších predikátů používaných v dalších kapitolách, aby byly shromážděny na jednom místě a v průběhu dalšího textu nemuseli být samostatně vysvětlovány. Pro větší stručnost použijeme pseudokód.
První skupina je tvořena predikáty pro konverzi hodnot. Signatura těchto predikátů má obecně tvar:
2
S některými z těchto predikátů jsme se již setkali, jako třeba s tuple2List
. Patří sem také ascii2Atom
, lower2Upper
či univ2List
a mnoho dalších. V případech, které si to vyžadují,
jsou rovněž definovány i jejich symetrické varianty.
Pro jednorázové obecné transformace výsledků tj. situace, kdy
parser vydává jedinou derivaci, je
připraven predikát alter
. Zpravidla jej budeme používat pro
ukládání výsledků do struktur. Jeho první parametr se unifikuje s přicházejícím výsledkem parseru a v parametru druhém lze specifikovat
jeho transformovanou verzi. Predikátem alter
lze například vyjádřit
i dříve zmíněný tuple2List
:
<@
Obvyklejší však bude spíše jeho použití při vytváření stromových datových
struktur. Představme si situaci, kdy získáváme z parseru trojice
obsahující v první položce kořen nového stromu, v druhé položce levý a v třetí pravý podstrom. Transformace výsledku i vytvoření uzlu je s pomocí predikátu alter
snadné:
<@
V kapitole vytvoříme parser přijímající jako
vstup aritmetické výrazy, jenž analyzuje jejich strukturu a provede
následně vyhodnocení. Pro řešení jednoduchých úloh tohoto typu potřebujeme
disponovat operací umožňující explicitní vyhodnocení aritmetického
výrazu. Touto operací je eval
. Předpokládá vstup ve formě
termu:
<@
Provede vyhodnocení analogické použití standardního prologovského
predikátu is/2
.
Především pro ladící účely je připraven predikát show
a jeho
varianty showln
, showString
a další, jež vypisují
výsledek na standardní výstup. Predikáty zobrazují příchozí výsledek,
aniž by jej jakýmkoli způsobem modifikovali.
Zmíníme již pouze poslední dva predikáty. Prvním z nich je
<@
který ignoruje přicházející výsledek a na výstup vydává hodnotu
a druhým identita:
<@
Použití nacházejí především ve spojení s dalšími operacemi, ale i v jiných konstruktorech parserů -- všude tam, kde daný kombinátor či
mutátor vyžaduje predikát pro zpracování hodnoty, ale my ji chceme v daném případě zachovat.
dvorka 2013-12-31