off/2 udržují módy line/2 a lineCol/3
informaci o pozici ve vstupním textu ve formě aktuálního řádku resp.
aktuálního řádku a sloupce. Způsob zavedení těchto módů je stejný jako
v předchozích případech. Jsou vhodné především při výpisech chybových
hlášení -- lze rychle a snadno lokalizovat místo výskytu chyby.
Další z možných aplikací těchto módů je zeštíhlování seznamu úspěšných
rozkladů. V literatuře věnované strukturální analýze textu se někdy při
nedeterministickém výpočtu používá pro výběr nadějné cesty délka
dosud zpracovaného vstupu. Takový přístup můžeme díky módů vyzkoušet
v knihovně konstruktorů parserů i my. Pro tento účel je připraven
mutátor <^>, jenž je variantou diamantu. Nevydává
však derivaci z hlavy seznamu úspěšných rozkladů, ale derivaci
s největší váhou:
<^>(P,I+TrimL):-
I+L :-> P,
<^>^(L,_,TrimL).
Tuto derivaci hledá ve struktuře LOS pomocný predikát <^>^.
Získání váhy se provádí vybalením nejvnějšnějšího vhodného selektoru
(off/2, line/2, lineCol/3)
pomocí predikátu pcGetWeight/2. V případě rovnosti vah rozhoduje mezi
derivacemi jejich pořadí v seznamu úspěšných rozkladů.
Programátor může rozšířit predikát pcGetWeight/2 tak, aby
pracoval i v jeho vlastních módech.
Tento mutátor byl společně s módem off/2 použit v ukázkové
aplikaci HiLex (viz část
).
dvorka 2013-12-31