Oui, bien sûr, il existe en C une structure de ce type :
Mais ce n'est pas si simple ! Actuellement, la résolution de la série de conditions est purement linéaire. Il n'y aucune gestion de priorité entre elles. Premier lu, premier traité ! Donc un simple switch convient. C'est d'ailleurs ce qui est codé aujourd'hui.
S'il fallait ajouter des parenthèses (appelons la chose comme ça par facilité), cela veut dire qu'il faudrait gérer des priorités : les parenthèses étant plus prioritaires que les "et", les "ou" et les "non". Il faudrait aussi tenir compte des parenthèses imbriquées. Cela signifie qu'il faudrait complètement réécrire cette partie du code pour, au choix :
J'ai travaillé dans le code de ce module il y a quelques années pour y ajouter les conditions sur les horodatages. Je peux te dire qu'il est 'un peu' chargé ! et ce n'a pas dû s'arranger depuis que le module "filtre de collections" a été ajouté. C'est d'ailleurs ce qui a fait vriller Aurélien l'année dernière.
J'aimerais bien faire ça, car j'ai déjà codé plusieurs analyseurs syntaxiques, mais ça me fait vraiment peur !
Code :
switch (expression) {
case expression-constante : instructions
case expression-constante : instructions
...
default : instructions
}
Mais ce n'est pas si simple ! Actuellement, la résolution de la série de conditions est purement linéaire. Il n'y aucune gestion de priorité entre elles. Premier lu, premier traité ! Donc un simple switch convient. C'est d'ailleurs ce qui est codé aujourd'hui.
S'il fallait ajouter des parenthèses (appelons la chose comme ça par facilité), cela veut dire qu'il faudrait gérer des priorités : les parenthèses étant plus prioritaires que les "et", les "ou" et les "non". Il faudrait aussi tenir compte des parenthèses imbriquées. Cela signifie qu'il faudrait complètement réécrire cette partie du code pour, au choix :
- Coder à la main la récursivité du bidule.
- Où faire appel à des résolveurs externes, le couple YAcc et Lex, par exemple (Ce sont ceux que je connais, mais il en existe certainement d'autres).
J'ai travaillé dans le code de ce module il y a quelques années pour y ajouter les conditions sur les horodatages. Je peux te dire qu'il est 'un peu' chargé ! et ce n'a pas dû s'arranger depuis que le module "filtre de collections" a été ajouté. C'est d'ailleurs ce qui a fait vriller Aurélien l'année dernière.
J'aimerais bien faire ça, car j'ai déjà codé plusieurs analyseurs syntaxiques, mais ça me fait vraiment peur !
Mes photos : jpverrue.fr