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 obsahuje pozici ve vstupu a 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