Syntaxe de règles
La syntaxe des règles se base sur les principes suivants :
Toutes les règles ont un nom.
Toutes les règles sont entourées par des parenthèses.
Toutes les règles commencent par un opérateur suivi par un opérande.
Règles simples
Les règles simples sont des expressions construites avec l’opérateur "defined" uniquement. Cet opérateur ne prend qu’un seul argument, un symbole défini par l’utilisateur, qui le suit. Le symbole est séparé de l’opérateur par une espace et doit être entouré par des guillemets doubles.
Les règles simples s’écrivent ainsi :
Règle(defined "symbole")
Un symbole peut prendre la forme "partition" ou la forme "partition.valeur_n". Dans le cas où la forme est "partition.value_n", plusieurs règles partageront le même préfixe "partition.".
Règle1(defined "partition1")
Règle2(defined "partition2")
Règle3(defined "partition3.valeur_1")
Règle4(defined "partition3.valeur_2")
Règle5(defined "partition3.valeur_3")
Règles complexes
Les règles complexes sont des expressions booléennes. Elles peuvent faire appel à plusieurs des opérateurs disponibles : l’opérateur "defined" et les opérateurs logiques "and", "or", "not", "xor".
Les opérateurs logiques prennent deux arguments dont l’ordre n’est pas important. Les arguments des opérateurs logiques doivent être entourés par des parenthèses. Ils peuvent être soit l’expression d’une règle simple, soit l’expression d’une autre règle complexe.
Les opérateurs sont placés avant les opérandes dans l’expression booléenne. Les parenthèses imbriquées indiquent le groupement des expressions et l’ordre de leur évaluation.
Règle(and (defined "symbole_p")(defined "symbole_q"))
Cette règle est vraie si symbole_p et symbole_q sont définis.
Règle(or (defined "symbole_p")(defined "symbole_q"))
Cette règle est vraie si symbole_p ou symbole_q est défini.
Règle(and (or (defined "symbole_p") (defined "symbole_q")) (defined "symbole_r"))
Cette règle est vraie si symbole_p ou symbole_q est défini (évaluation de "or" en premier), et si symbole_r est aussi défini.