Bonjour à tous,
Dans mon programme, j'ai un champs dans lequel l'utilisateur doit entrer une expression logique du type : "operande" + "operateur" + "operande"
"operande" pouvant être :
une lettre ou "(NOT lettre)" ou une équation logique commençant par une "(" et finissant par une ")"
"operateur" peut être : AND, OR, NOR
Au départ j'avais écris une fonction récursive qui controlait une chaine de type "A AND NOT B OR C" mais finalement je dois gérer des chaines de type : "(A AND (NOT B)) OR (C AND D)"
Mais je ne sais pas comment m'y prendre avec les parenthèses pour controler que l'expression entrée est conforme.
Y a t il des algo types pour vérifier que la chaine entrée est bien formée?
Merci
Oui si l'on peut dire.
Ce que tu dois faire consite à consituer un arbre syntaxique.
http://fr.wikipedia.org/wiki/AST
Dans ton cas c'est du gâteau ;) puisque toute expression est entre parenthèses.
Cerise sur le gâteau en question. Quand tu auras écrit ton analyseur syntaxique, tu pourras facilement l'adapter pour analyser du Lisp :)
Sans doute que chaque parenthèse ouvrante va induire un noeud de l'arbre avec un opérateur et que lorsque tu rencontres des parenthèses fermantes tu dois (avec leur parenthèses ouvrantes associées) obtenir les feuilles de l'arbre.
Au fait, quel rapport avec Delphi, fondamentalement ?