C-Prolog had this:
/* File : pl/grammar
Author : Fernando Pereira
Updated: Wednesday February 1st, 1984, 8:38:15 pm
Purpose: translation of grammar rules
*/
$t_body(!, S, S, !) :- !.
$t_body([], S, S1, S=S1) :- !.
$t_body([X], S, SR, 'C'(S,X,SR)) :- !.
$t_body([X|R], S, SR, ('C'(S,X,SR1),RB)) :- !,
$t_body(R, SR1, SR, RB).
$t_body({T}, S, S, T) :- !.
$t_body((T,R), S, SR, (Tt,Rt)) :- !,
$t_body(T, S, SR1, Tt),
$t_body(R, SR1, SR, Rt).
$t_body((T;R), S, SR, (Tt;Rt)) :- !,
$t_body(T, S, S1, T1), $t_fill(S, SR, S1, T1, Tt),
$t_body(R, S, S2, R1), $t_fill(S, SR, S2, R1, Rt).
$t_body(T, S, SR, Tt) :-
$extend([S,SR], T, Tt).
No (''|')/2. But also no (->)/2 and no (\+)/1.
LoL