off(Offset, Selector)

off/2 je mód udržující stavovou informaci o aktuální pozici ve zdrojovém textu vyjádřenou relativním posunem v počtu položek vstupu. Protože jsou položky vstupu načítány výhradně primitivem item, doplníme jeho proceduru o následující klauzuli:
item(off(Off,I)+L):-
        item(I+Li) -> (Li=[N>R] -> New is Off+1,L=[off(New,N)>R]
                                ;  L=[]).
Při volání parseru v tomto módu potom $Offset$ obsahuje pozici ve vstupu a $Selektor$ je přípustný vnořený selektor dle obrázku [*]:
?- off(0,s("{ This is off/2 test! } listing(item)."))+L :->
        pascalNestedComment.
L = [off(23, s(" listing(item)."))>comment] 
Yes



dvorka 2013-12-31