]> Repositorios git - scryer-prolog.git/commitdiff
enable phrase_ rules for module resolved grammars (#785)
authorMark Thom <[email protected]>
Wed, 3 Feb 2021 22:48:09 +0000 (15:48 -0700)
committerMark Thom <[email protected]>
Wed, 3 Feb 2021 22:48:12 +0000 (15:48 -0700)
src/lib/dcgs.pl

index 05f41cb02cfae3ca12654f5cc0bf8e8cbffb6b7b..a33c870bba2b3cc10fbf5c2452be7d33754b4e4c 100644 (file)
@@ -31,6 +31,8 @@ phrase(GRBody, S0, S) :-
 
 phrase_([], S, S).
 phrase_(!, S, S).
+phrase_(_:[], S, S).
+phrase_(_:!, S, S).
 phrase_((A, B), S0, S) :-
     phrase(A, S0, S1), phrase(B, S1, S).
 phrase_(M:(A, B), S0, S) :-
@@ -57,16 +59,24 @@ phrase_(M:(A | B), S0, S) :-
     (  phrase(M:A, S0, S) ; phrase(M:B, S0, S)  ).
 phrase_({G}, S0, S) :-
     (  call(G), S0 = S  ).
+phrase_(M:{G}, S0, S) :-
+    (  call(M:G), S0 = S  ).
 phrase_(call(G), S0, S) :-
     call(G, S0, S).
+phrase_(M:call(G), S0, S) :-
+    call(M:G, S0, S).
 phrase_((A -> B), S0, S) :-
     phrase((A -> B ; fail), S0, S).
 phrase_(M:(A -> B), S0, S) :-
     phrase((M:A -> M:B ; fail), S0, S).
 phrase_(phrase(NonTerminal), S0, S) :-
     phrase(NonTerminal, S0, S).
+phrase_(M:phrase(NonTerminal), S0, S) :-
+    phrase(M:NonTerminal, S0, S).
 phrase_([T|Ts], S0, S) :-
     append([T|Ts], S, S0).
+phrase_(_:[T|Ts], S0, S) :-
+    append([T|Ts], S, S0).
 
 
 % The same version of the below two dcg_rule clauses, but with module scoping.