line(Line, Selector) a lineCol(Line, Column, Selector)

Stejně jako off/2 udržují módy line/2lineCol/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