diff --git a/src/prolog/examples/bimetatrans_ruleml.pl b/src/prolog/examples/bimetatrans_ruleml.pl
index 142d9d1e..ea56c2e2 100644
--- a/src/prolog/examples/bimetatrans_ruleml.pl
+++ b/src/prolog/examples/bimetatrans_ruleml.pl
@@ -65,8 +65,8 @@ parse_ruleml(AssertItem, QueryItem, XML) :-
*/
parse_header -->
- partial_string_ws(""),
- partial_string_ws(""),
+ list_ws("").
@@ -176,15 +176,15 @@ ruleml_top_level_items(AssertItem, QueryItems) -->
ruleml_assert(Items) -->
( { var(Items) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_assert_items(Items),
!,
- partial_string_ws("")
- ; partial_string(""),
+ list_ws("")
+ ; "",
{ Items \== [] },
ruleml_assert_items(Items),
!,
- partial_string("")
+ ""
).
@@ -244,17 +244,17 @@ ruleml_query_items([]) --> [].
ruleml_query_item(Item) -->
( { var(Item) } ->
- partial_string_ws(""),
+ list_ws(""),
( ruleml_condition(Item0),
{ Item = (?- Item0) } ->
{ true }
; { true }
),
- partial_string_ws("")
- ; partial_string(""),
+ list_ws("")
+ ; "",
{ Item = (?- Item0) },
ruleml_condition(Item0),
- partial_string("")
+ ""
).
@@ -264,7 +264,7 @@ ruleml_query_item(Item) -->
* items. Whitespace, for example, is discarded immediately after
* being read.
*
- * partial_string_ws reads a string into its argument as a partial
+ * list_ws reads a string into its argument as a partial
* string before consuming any following whitespace.
*/
@@ -283,10 +283,13 @@ sign('+') --> "+".
double_quote('"') --> "\"".
-partial_string_ws(String) -->
- partial_string(String),
+list_ws(Ls) -->
+ list(Ls),
ws.
+list([]) --> [].
+list([L|Ls]) --> [L], list(Ls).
+
/*
* ruleml_assert_item//1 specifies the elements of RuleML that may
* appear as items in a RuleML Assert performative, an implicitly
@@ -370,7 +373,7 @@ ruleml_item_conjunction([]) --> [].
ruleml_conjunction_of_items(Items) -->
( { var(Items) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_item_conjunction(ItemsList),
( { ItemsList = [_,_|_] } ->
{ fold_commas(ItemsList, Items) }
@@ -379,8 +382,8 @@ ruleml_conjunction_of_items(Items) -->
; { ItemsList = [] } ->
{ Items = (true, true) }
),
- partial_string_ws("")
- ; partial_string(""),
+ list_ws("")
+ ; "",
( { Items = (true, true) } ->
{ true }
; { Items = (true, Item0) } ->
@@ -389,7 +392,7 @@ ruleml_conjunction_of_items(Items) -->
{ unfold_commas(Items, ItemsList) },
ruleml_item_conjunction(ItemsList)
),
- partial_string("")
+ ""
).
/*
@@ -417,7 +420,7 @@ ruleml_item_disjunction([]) --> [].
ruleml_disjunction_of_items(Items) -->
( { var(Items) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_item_disjunction(ItemsList),
( { ItemsList = [_,_|_] } ->
{ fold_semicolons(ItemsList, Items) }
@@ -426,8 +429,8 @@ ruleml_disjunction_of_items(Items) -->
; { ItemsList = [] } ->
{ Items = (false ; false) }
),
- partial_string_ws("")
- ; partial_string(""),
+ list_ws("")
+ ; "",
( { Items = (false ; false) } ->
{ true }
; { Items = (false ; Item0) } ->
@@ -436,7 +439,7 @@ ruleml_disjunction_of_items(Items) -->
{ unfold_semicolons(Items, ItemsList) },
ruleml_item_disjunction(ItemsList)
),
- partial_string("")
+ ""
).
@@ -485,32 +488,32 @@ split_plex(Xs, PlexItems, RepoItem) :-
ruleml_plex(Plex) -->
( { var(Plex) } ->
- ( partial_string_ws("") ->
+ ( list_ws("") ->
ruleml_items(PlexItems),
- ( partial_string_ws("") ->
+ ( list_ws("") ->
ruleml_var(RepoVar),
- partial_string_ws(""),
+ list_ws(""),
{ append(PlexItems, RepoVar, Plex) }
; { Plex = PlexItems }
),
- partial_string_ws("")
- ; partial_string_ws("")
+ list_ws("")
+ ; list_ws("")
)
; { \+ string(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("")
+ ""
)
).
@@ -526,14 +529,14 @@ ruleml_plex(Plex) -->
ruleml_naf(Item) -->
( { var(Item) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_condition(NafItem),
{ Item = (\+ NafItem) },
- partial_string_ws("")
- ; partial_string(""),
+ list_ws("")
+ ; "",
{ Item = (\+ NafItem) },
ruleml_condition(NafItem),
- partial_string("")
+ ""
).
@@ -577,22 +580,22 @@ ruleml_atoms([]) --> [].
ruleml_atom(Item) -->
( { var(Item) } ->
- partial_string_ws(""),
- partial_string_ws(""),
+ list_ws(""),
+ list_ws(""),
prolog_symbol(Name),
{ Name \== (','), Name \== (';') },
- partial_string_ws(""),
+ list_ws(""),
ruleml_items(Args),
- partial_string_ws(""),
+ list_ws(""),
{ Item =.. [Name | Args] }
; { Item =.. [Name | Args] },
{ Name \== (','), Name \== (';') },
- partial_string(""),
- partial_string(""),
+ "",
+ "",
prolog_symbol(Name),
- partial_string(""),
+ "",
ruleml_items(Args),
- partial_string("")
+ ""
).
/*
@@ -642,35 +645,35 @@ ruleml_item(Item) -->
ruleml_expr(Item) -->
( { var(Item) } ->
- partial_string_ws(""),
- partial_string_ws(""),
+ list_ws(""),
+ list_ws(""),
prolog_symbol(Name),
- partial_string_ws(""),
+ list_ws(""),
ruleml_items(Args),
- ( partial_string_ws(""),
+ ( list_ws(""),
ruleml_item(RepoItem),
- partial_string_ws(""),
+ list_ws(""),
!,
{ fold_commas(Args, ArgsCommas) },
{ Item =.. [Name, (ArgsCommas | RepoItem)] }
; { Item =.. [Name | Args] }
),
- partial_string_ws("")
+ 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("")
+ ""
).
@@ -686,15 +689,15 @@ ruleml_expr(Item) -->
ruleml_ind(Name) -->
( { var(Name) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_ind_helper(Cs),
- partial_string_ws(""),
+ list_ws(""),
{ atom_chars(Name, Cs) }
; { atom(Name) },
- partial_string(""),
+ "",
{ atom_chars(Name, Cs) },
ruleml_ind_helper(Cs),
- partial_string("")
+ ""
).
@@ -728,16 +731,16 @@ ruleml_ind_helper(Cs) -->
ruleml_var(Var) -->
( { var(Var) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_var_contents(VarChars),
{ atom_chars(VarName, VarChars) },
{ Var = '$V'(VarName) },
- partial_string_ws("")
+ list_ws("")
; { Var = '$V'(VarName) },
- partial_string(""),
+ "",
{ atom_chars(VarName, VarChars) },
ruleml_var_contents(VarChars),
- partial_string("")
+ ""
).
@@ -801,18 +804,18 @@ constant_chars(symbol, Constant, Chars) :-
ruleml_data(Name) -->
( { var(Name) } ->
- partial_string_ws(""),
+ list_ws("\">"),
ruleml_data_contents(Type, Cs),
{ constant_chars(Type, Name, Cs) },
- partial_string_ws("")
- ; partial_string("")
+ ; ""),
+ "\">",
ruleml_data_contents(Type, Cs),
- partial_string("")
+ ""
).
/*
@@ -1042,24 +1045,24 @@ ruleml_implies_head(Item) -->
ruleml_implies(Rule) -->
( { var(Rule) } ->
- partial_string_ws(""),
- partial_string_ws(""),
+ list_ws(""),
+ list_ws(""),
ruleml_implies_head(Head),
- partial_string_ws(""),
- partial_string_ws(""),
+ list_ws(""),
+ list_ws(""),
ruleml_condition(Body),
- partial_string_ws(""),
- partial_string_ws(""),
+ list_ws(""),
+ 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("")
+ "",
+ ""
).
@@ -1082,16 +1085,16 @@ ruleml_equal_item(EqualItem) -->
ruleml_equal(Equal) -->
( { var(Equal) } ->
- partial_string_ws(""),
+ list_ws(""),
ruleml_equal_item(Left),
ruleml_equal_item(Right),
- partial_string_ws(""),
+ list_ws(""),
{ Equal = (Left = Right) }
; { Equal = (Left = Right) },
- partial_string(""),
+ "",
ruleml_equal_item(Left),
ruleml_equal_item(Right),
- partial_string("")
+ ""
).