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();
}
}