SableCC2Hs-0.0.0.1: prolog/trim_ast.pl
% Manuelle Umbenennungen im AST
%
% Diese AST-Transformationen folgen grob den Transformationen aus ASTProlog.java
% todo: move some of this renamings to the grammar description in BParser.scc
%
trim([ptoken_228/Identifier],Atom):- name(Atom,Identifier).
trim(ptoken_95/"MACHINE",'MACHINE').
trim(ptoken_231/Integer,Atom):- name(Atom,Integer).
trim(List,Res):- trimList(List,Res),!.
trim(node(Functor1,Functor2,Pos,Nodes),Res) :-!,
lookupRename(Functor1,Functor2,NewFunctor),
trimList(Nodes,NewNodes),
Res=..[NewFunctor | [Pos|NewNodes]].
trim(X,_) :- throw('trim catch all'(X)).
trimList([],[]).
trimList([H|R],[H2|R2]):-
trim(H,H2),
trimList(R,R2).
lookupRename(F1,F2,R) :- rename(F1,F2,R),!.
lookupRename(F1,_,F1).
% right at the top of ASTProlog.Java :
rename(unequal, _, not_equal).
rename(universal_quantification, _, forall).
rename(existential_quantification, _, exists).
rename(unary, _, unary_minus).
rename(belong, _, member).
rename(not_belong, _, not_member).
rename(include, _, subset).
rename(not_include, _, not_subset).
rename(include_strictly, _, subset_strict).
rename(not_include_strictly, _, not_subset_strict).
rename(op_with_return, _, operation_call).
rename(op, _, operation_call).
rename(subtract, _, minus).
rename(prover_comprehension_set, _, comprehension_set).
% defined in ASTProlog.jave below line 856:
% here we need to look at the second argument
% becaue true and false are used for several different things.
rename(true,'ATrueExpression',boolean_true).
rename(false,'AFalseExpression',boolean_false).
rename(true,'ATruePredicate',truth).
rename(false,'AFalsePredicate',falsity).