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