Integer DCGs that work in both directions.

This commit is contained in:
Simon Forman 2019-08-07 11:40:49 -07:00
parent 0048ee212d
commit 4ea77cf1be
1 changed files with 11 additions and 1 deletions

View File

@ -220,7 +220,6 @@ combo(branch, [T, F, Expr|S], S, Ei, Eo) :-
(append(T, Ei, Eo) ; append(F, Ei, Eo))
).
combo(loop, [_, false|S], S, E, E ).
combo(loop, [B, true|S], S, Ei, Eo) :- append(B, [B, loop|Ei], Eo).
combo(loop, [B, Expr|S], S, Ei, Eo) :-
@ -316,3 +315,14 @@ to_fixed_point(DCG, Ei, Eo) :-
grow(Ei, Eo) :- to_fixed_point(rebo(expando, grow ), Ei, Eo).
shrink(Ei, Eo) :- to_fixed_point(rebo(contracto, shrink), Ei, Eo).
% format_n(N) --> {number(N), !, number_codes(N, Codes)}, Codes.
% format_n(N) --> signed_digits(Codes), !, {number_codes(N, Codes)}.
% signed_digits([45|Codes]) --> [45], !, digits(Codes).
% signed_digits( Codes ) --> digits(Codes).
% digits([Ch|Chars]) --> [Ch], {code_type(Ch, digit)}, digits(Chars).
% digits([]), [Ch] --> [Ch], {code_type(Ch, space) ; Ch=0'] }.
% digits([], [], _). % Match if followed by space, ], or nothing.