Logtalk 2.15.4 release files.
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@843 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
78
Logtalk/examples/dcgs/xml.lgt
Normal file
78
Logtalk/examples/dcgs/xml.lgt
Normal file
@@ -0,0 +1,78 @@
|
||||
|
||||
:- object(xml).
|
||||
|
||||
|
||||
:- info([
|
||||
version is 1.0,
|
||||
date is 2003/7/7,
|
||||
author is 'Paulo Moura',
|
||||
comment is 'Conversion between compound terms and XML.']).
|
||||
|
||||
|
||||
:- public(convert/3).
|
||||
|
||||
:- mode(convert(@compound, @compound, -atom), zero_or_one).
|
||||
:- mode(convert(-compound, -compound, +atom), zero_or_one).
|
||||
|
||||
:- info(convert/3, [
|
||||
comment is 'Converts between a compound term and an interpretation and XML.',
|
||||
argnames is ['Term', 'Interpretation', 'XML']]).
|
||||
|
||||
|
||||
convert(Term, Interpretation, XML) :-
|
||||
var(XML) ->
|
||||
phrase(term(Term, Interpretation), List),
|
||||
atom_codes(XML, List)
|
||||
;
|
||||
atom_codes(XML, List),
|
||||
phrase(term(Term, Interpretation), List).
|
||||
|
||||
|
||||
term(Term, Interpretation) -->
|
||||
{nonvar(Term), nonvar(Interpretation),
|
||||
Interpretation =.. [Functor| Tags], Term =.. [Functor| Args]},
|
||||
open_tag(Functor),
|
||||
arguments(Tags, Args),
|
||||
close_tag(Functor).
|
||||
|
||||
term(Term, Interpretation) -->
|
||||
{var(Term), var(Interpretation)},
|
||||
open_tag(Functor),
|
||||
arguments(Tags, Args),
|
||||
close_tag(Functor),
|
||||
{Interpretation =.. [Functor| Tags], Term =.. [Functor| Args]}.
|
||||
|
||||
|
||||
arguments([], []) -->
|
||||
[].
|
||||
|
||||
arguments([Tag| Tags], [Arg| Args]) -->
|
||||
open_tag(Tag),
|
||||
value(Arg),
|
||||
close_tag(Tag),
|
||||
arguments(Tags, Args).
|
||||
|
||||
|
||||
open_tag(Tag) -->
|
||||
"<", value(Tag), ">".
|
||||
|
||||
close_tag(Tag) -->
|
||||
"</", value(Tag), ">".
|
||||
|
||||
|
||||
value(Value) -->
|
||||
{nonvar(Value), atom_codes(Value, Codes)}, characters(Codes).
|
||||
|
||||
value(Value) -->
|
||||
{var(Value)}, characters(Codes), {atom_codes(Value, Codes)}.
|
||||
|
||||
|
||||
characters([]) --> [].
|
||||
characters([Code| Codes]) --> [Code], {character(Code)}, characters(Codes).
|
||||
|
||||
|
||||
character(Code) :- Code @>= 0'a, Code @=< 0'z, !.
|
||||
character(Code) :- Code @>= 0'A, Code @=< 0'Z.
|
||||
|
||||
|
||||
:- end_object.
|
Reference in New Issue
Block a user