Skládání selektorů

Jednotlivé módy parserů lze různými způsoby kombinovat. Nové módy se z již existujících vytvářejí vnořováním selektorů. Uvnitř procedury, kde je pro daný mód určeno specifikované chování pomocí explicitní klauzule, musí být selektor módu vždy dostupný, aby jej bylo možné detekovat. Například v proceduře primitiva item probíhá rozbalování módů tak, by se primitivum dostalo až k selektoru vstupu.

Z toho plyne, že selektory do sebe nelze vnořovat libovolně. Závislosti mezi módy a možnosti jejich vzájemného využívání obsahuje obrázek [*], kde relace:

$X \rightarrow Y$
určuje, že selektor $X$ může být vnořen v selektoru $Y$. Relace $\rightarrow$ je tranzitivní.
Obrázek: Vnořování módů
Použití složeného selektoru tedy může vypadat takto:
?- off(0,lineCol(1,1,prn(s("564e-2"))))+L 
|       :-> double.
5564eee-2
L = [off(6, lineCol(1, 7, prn(s([]))))>5.64] 
Yes
Mód prn/1 uvedený v příkladu vypisuje do aktuálního výstupního proudu položky načítané ze vstupu. Při analýze s návratem tak například lze získat přibližnou představu o tom, jak efektivně je parserem vstupní text zpracováván.



dvorka 2013-12-31