%init: Idle;
%accept: End;


Idle         : { isPresentRec().return==-1 } -> WillDoFoo
             | { isPresentRec().return!=-1 } -> IgnoreFoo
             | { ! RETURN(isPresentRec) } -> Idle ;

IgnoreFoo    : { isPresentRec().return!=-1 } -> IgnoreFoo
             | { isPresent().return!=-1 } -> End ;

WillDoFoo    : { isPresentRec().return==-1 } -> WillDoFoo
             | { isPresent().return==-1 } -> WillDoFoo
             | { CALL(foo) } -> End;

End   
             : { !CALL(foo) && !RETURN(isPresent) && !RETURN(isPresentRec) } -> End;
