2-Sémantique Structurelle
:
CTX |- e '-e->' b Rf : ----------------------------------------- CTX |- <bool> e </bool> '-f->' b CTX |- e1 '-e->' b1 e2 '-e->' b2 Re1 : -------------------------------------------si b= b1 & b2 CTX |- <et> e1 e2 </et> '-e->' b CTX |- e1 '-e->' b1 e2 '-e->' b2 Re1 : ---------------------------------------------------- si b= b1 v b2 CTX |- <ou> e1 e2 </ou> '-e->' b CTX |- e1 '-e->' b1 Re1 : -------------------------------------- si b= ~b1 CTX |- <non> e1 </non> '-e->' b Re1 : ------------------------------ b '-e->' b Re1 : --------------------------- si b= CTX(v) CTX |- v '-e->' b
3-DCG + Prolog :
f(B) --> ['<bool>' ] , e(B) , ['</bool>'].
e(B1 & B2) --> ['<et>' ] , e(B1) , e(B2) , ['</et>'].
e(B1 v B2) --> ['<ou>' ] , e(B1) , e(B2) , ['</ou>'].
e(~ B) --> ['<non>' ] , e(B) , ['</non>'].
e(X) --> [X] , {member(X , [vrai , faux , a , b , c , d])}.
f(CTX ,B , V) --> ['<bool>' ] , e(CTX ,B , V) , ['</bool>'].
e(CTX ,B1 & B2 ,V) -->
['<et>' ] , e(CTX ,B1 , V1) , e(CTX ,B2 , V2) , ['</et>'], {et(V1 , V2 ,V)}.
e(CTX ,B1 v B2 ,V) -->
['<ou>' ] , e(CTX ,B1 , V1) , e(CTX ,B2 , V2) , ['</ou>'], {ou(V1 , V2 ,V)}.
e(CTX ,~ B , NV) -->
['<non>' ] , e(CTX ,B , V) , ['</non>'], {non(V , NV)}.
e(_ ,X , X ) --> [X] , {member(X , [vrai , faux])}.
e(CTX ,X , V) --> [X] , {member(X , [a , b , c , d]) , member(X=V , CTX)}.
4-Java :
import java.util.*; class FilterNumbers implements Iterator { private final Iterator iter; private Object nextnum; public FilterNumbers(Iterator iter) { this.iter = iter; } public boolean hasNext() { if (nextnum != null) return true; while (iter.hasNext()) { nextnum = iter.next(); if (nextnum instanceof Number) { return true; } } nextnum = null; return false; } public Object next() { if (nextnum == null && !hasNext()) throw new NoSuchElementException(); Object savenum = nextnum; nextnum = null; return savenum; } public void remove() { throw new UnsupportedOperationException(); } }
import java.util.*; public class IIterator { public static void main(String args[]) { // créer une liste List list = new ArrayList(); // lui ajouter des éléments de différents types list.add(null); list.add("test1"); list.add(new Integer(37)); list.add(new Double(12.34)); list.add(null); list.add("test2"); list.add(new Long(12345)); list.add(null); list.add(new Byte((byte)125)); // filtrer et afficher les seuls elements de classe Number Iterator iter = new FiltrerClasse( list.iterator() , Number.class); while (iter.hasNext()) { System.out.println(iter.next()); } iter = new FiltrerClasse( list.iterator() , String.class); while (iter.hasNext()) { System.out.println(iter.next()); } } } import java.util.*; class FiltrerClasse implements Iterator { private final Iterator iter; private Object objet; private Class classe; public FiltrerClasse(Iterator iter, Class classe) { this.iter = iter; this.classe = classe; } public boolean hasNext() { if (objet!= null) { return true; } while (iter.hasNext()) { objet = iter.next(); if (classe.isInstance(objet)) { return true; } } objet = null; return false; } public Object next() { if (objet == null && !hasNext()) { throw new NoSuchElementException(); } Object savenum = objet; objet = null; return savenum; } public void remove() { throw new UnsupportedOperationException(); } }