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
:
?- off(0,s("{ This is off/2 test! } listing(item)."))+L :->
pascalNestedComment.
L = [off(23, s(" listing(item)."))>comment]
Yes