From a89f03f27d2d8dfcdaa1693bab7e9cf05aee39c3 Mon Sep 17 00:00:00 2001 From: Markus Triska Date: Tue, 31 Mar 2020 01:24:15 +0200 Subject: [PATCH] embed literal lists directly in DCGs Example use of direct embedding: ?- phrase("abc", Ls0, Ls). Ls0 = [a,b,c|Ls]. --- src/prolog/examples/bimetatrans_ruleml.pl | 80 +++++++++++------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/src/prolog/examples/bimetatrans_ruleml.pl b/src/prolog/examples/bimetatrans_ruleml.pl index 9a325fde..7c0028d5 100644 --- a/src/prolog/examples/bimetatrans_ruleml.pl +++ b/src/prolog/examples/bimetatrans_ruleml.pl @@ -180,11 +180,11 @@ ruleml_assert(Items) --> ruleml_assert_items(Items), !, list_ws("") - ; partial_string(""), + ; "", { Items \== [] }, ruleml_assert_items(Items), !, - partial_string("") + "" ). @@ -251,10 +251,10 @@ ruleml_query_item(Item) --> ; { true } ), list_ws("") - ; partial_string(""), + ; "", { Item = (?- Item0) }, ruleml_condition(Item0), - partial_string("") + "" ). @@ -380,7 +380,7 @@ ruleml_conjunction_of_items(Items) --> { Items = (true, true) } ), list_ws("") - ; partial_string(""), + ; "", ( { Items = (true, true) } -> { true } ; { Items = (true, Item0) } -> @@ -389,7 +389,7 @@ ruleml_conjunction_of_items(Items) --> { unfold_commas(Items, ItemsList) }, ruleml_item_conjunction(ItemsList) ), - partial_string("") + "" ). /* @@ -427,7 +427,7 @@ ruleml_disjunction_of_items(Items) --> { Items = (false ; false) } ), list_ws("") - ; partial_string(""), + ; "", ( { Items = (false ; false) } -> { true } ; { Items = (false ; Item0) } -> @@ -436,7 +436,7 @@ ruleml_disjunction_of_items(Items) --> { unfold_semicolons(Items, ItemsList) }, ruleml_item_disjunction(ItemsList) ), - partial_string("") + "" ). @@ -500,17 +500,17 @@ ruleml_plex(Plex) --> acyclic_term(Plex) }, ( { functor(Plex, ('.'), 2) } -> { split_plex(Plex, PlexItems, RepoVar) }, - partial_string(""), + "", ruleml_items(PlexItems), ( { RepoVar \== [] } -> - partial_string(""), + "", ruleml_var(RepoVar), - partial_string("") + "" ; { true } ), - partial_string("") + "" ; { Plex == [] } -> - partial_string("") + "" ) ). @@ -530,10 +530,10 @@ ruleml_naf(Item) --> ruleml_condition(NafItem), { Item = (\+ NafItem) }, list_ws("") - ; partial_string(""), + ; "", { Item = (\+ NafItem) }, ruleml_condition(NafItem), - partial_string("") + "" ). @@ -587,12 +587,12 @@ ruleml_atom(Item) --> { Item =.. [Name | Args] } ; { Item =.. [Name | Args] }, { Name \== (','), Name \== (';') }, - partial_string(""), - partial_string(""), + "", + "", prolog_symbol(Name), - partial_string(""), + "", ruleml_items(Args), - partial_string("") + "" ). /* @@ -657,20 +657,20 @@ ruleml_expr(Item) --> ), list_ws("") ; { Item =.. [Name | Args] }, - partial_string(""), - partial_string(""), + "", + "", prolog_symbol(Name), - partial_string(""), + "", ( { Args = [(InnerArgs | RepoItem)] } -> { InnerArgs = (_,_) -> unfold_commas(InnerArgs, InnerArgsList) ; InnerArgsList = [InnerArgs] }, ruleml_items(InnerArgsList), - partial_string(""), + "", ruleml_item(RepoItem), - partial_string("") + "" ; ruleml_items(Args) ), - partial_string("") + "" ). @@ -691,10 +691,10 @@ ruleml_ind(Name) --> list_ws(""), { atom_chars(Name, Cs) } ; { atom(Name) }, - partial_string(""), + "", { atom_chars(Name, Cs) }, ruleml_ind_helper(Cs), - partial_string("") + "" ). @@ -734,10 +734,10 @@ ruleml_var(Var) --> { Var = '$V'(VarName) }, list_ws("") ; { Var = '$V'(VarName) }, - partial_string(""), + "", { atom_chars(VarName, VarChars) }, ruleml_var_contents(VarChars), - partial_string("") + "" ). @@ -807,12 +807,12 @@ ruleml_data(Name) --> ruleml_data_contents(Type, Cs), { constant_chars(Type, Name, Cs) }, list_ws("") - ; partial_string(""), + "\">", ruleml_data_contents(Type, Cs), - partial_string("") + "" ). /* @@ -1052,14 +1052,14 @@ ruleml_implies(Rule) --> list_ws(""), { Rule = ( Head :- Body ) } ; { Rule = ( Head :- Body ) }, - partial_string(""), - partial_string(""), + "", + "", ruleml_implies_head(Head), - partial_string(""), - partial_string(""), + "", + "", ruleml_condition(Body), - partial_string(""), - partial_string("") + "", + "" ). @@ -1088,10 +1088,10 @@ ruleml_equal(Equal) --> list_ws(""), { Equal = (Left = Right) } ; { Equal = (Left = Right) }, - partial_string(""), + "", ruleml_equal_item(Left), ruleml_equal_item(Right), - partial_string("") + "" ). -- 2.54.0