empty/0.
V módu empty/0 je provedena abstraktní interpretace za účelem
analýzy parseru. Pokud je schopen přijmout prázdný řetězec, vydá
atom true, v opačném případě vydá false.
Nejdříve si ukážeme některá ze základních primitiv:
epsilon(empty+true). return(_,empty+true). terminate(empty+false). item(empty+false). fulfil(_,empty+false). symbol(_,empty+false).Rozšíření definic konstruktorů je velmi přirozené. Sekvenční kompozice parserů
<&>(P1,P2,empty+Empty):-
empty+Empty1 :-> P1,
empty+Empty2 :-> P2,
pcAND(Empty1,Empty2,Empty).
Alternativní kompozice parserů
<:>(P1,P2,empty+Empty):-
empty+Empty1 :-> P1,
empty+Empty2 :-> P2,
pcOR(Empty1,Empty2,Empty).
Doplnění klauzulí módu je nutné pouze u základních kombinátorů a mutátorů.
Složitější parsery nemusejí být doplňovány ani modifikovány,
protože jsou z nich složeny. Můžeme si proto hned ukázat parser
double v módu empty/0.
Bez zásahů do zdrojového kódu nám vydá požadovaný výsledek:?- empty+Empty :-> double. Empty = false YesVýpočet v
empty/0 se od doposud představených módů liší tím, že
má charakter abstraktní interpretace parseru. Při výpočtu se
neprovádí rozklad, ale získávají se informace o jeho vlastnostech.
Stejný charakter bude mít i mód, který vytvoříme v následující části.
dvorka 2013-12-31