Chapitre 12
ANNEXE

Programme d’équipement du système de trace

Voici un programme, écrit en langage de théorie, qui permet d’équiper automatiquement du système de trace, les règles d’un fichier.

‘B_ST  
 
THEORY Main IS  
 
        bget(F, R)  
&       EquipeTheories(R | __PasDeTheorie__)  
        =>  
        Equipe(F);  
 
        bget(F, R)  
&       EquipeTheories(R | L)  
        =>  
        Equipe(F | L);  
 
        bcall(WRITE: bwritef("\nTHEORY % END\n", T))  
        =>  
        EquipeTheories((THEORY T END) | L);  
 
        bcall(WRITE: bwritef("\nTHEORY % IS\n", T))  
&       bcall(MODR: bmodr(IndexRegle.1,0))  
&       EquipeReglesBackward(C | T)  
&       bcall(WRITE: bwritef("\nEND\n"))  
        =>  
        EquipeTheories((THEORY T IS C END) | L);  
 
        bsearch(T, (L ,  btrue), R)  
&       bcall(MODR: bmodr(IndexRegle.1,0))  
&       bcall(WRITE: bwritef("\nTHEORY % IS\n", T))  
&       EquipeReglesForward(C | T)  
&       bcall(WRITE: bwritef("\nEND\n"))  
        =>  
        EquipeTheories((THEORY T IS C END) | L);  
 
 
        EquipeTheories((A) | L)  
&       bcall(WRITE: bwritef("\n&\n"))  
&       EquipeTheories((B) | L)  
        =>  
        EquipeTheories((A & B) | L);  
 
        brule(IndexRegle.1, N)  
&       bguard((ARI;MODR): bmodr(IndexRegle.1, (N+1)))  
&       brule(IndexRegle.1, M)  
&       bcall(WRITE: bwritef("%\n=>\n% &\n bcall1(ForwardRule(%.%))\n", A, B, T, M))  
        =>  
        EquipeReglesForward((A=>B) | T);  
 
        EquipeReglesForward(A | T)  
&       bcall(WRITE: bwritef("\n;\n"))  
&       EquipeReglesForward(B | T)  
        =>  
        EquipeReglesForward((A;B) | T);  
 
        brule(IndexRegle.1, N)  
&       bguard((ARI;MODR): bmodr(IndexRegle.1, (N+1)))  
&       brule(IndexRegle.1, M)  
&       bcall(WRITE: bwritef("bcall1(AtomicRule(%.%)) \n=>\n%\n", T, M, A))  
        =>  
        EquipeReglesBackward(A | T);  
 
        brule(IndexRegle.1, N)  
&       bguard((ARI;MODR): bmodr(IndexRegle.1, (N+1)))  
&       brule(IndexRegle.1, M)  
&       bcall(WRITE: bwritef("bcall1(BackwardRule(%.%)) &\n%\n=>\n%\n", T, M, A, B))  
        =>  
        EquipeReglesBackward((A=>B) | T);  
 
        EquipeReglesBackward(A | T)  
&       bcall(WRITE: bwritef("\n;\n"))  
&       EquipeReglesBackward(B | T)  
        =>  
        EquipeReglesBackward((A;B) | T)  
 
END  
 
&  
 
THEORY IndexRegle IS  
        0  
END