|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre actif
![]() Inscription : avril 2010 Messages : 221 ![]() |
Bonjour,
Dans une application web j'ai un ensemble de boutons cliquables définit comme suit: Code :
=> En conclusion les boutons séparés par des "OU" ne peuvent pas avoir la class "presse" simultanément, les bouton séparés par des "ET" eux, le peuvent. Mon problème est que cette expression logique est crée par l'utilisateur de l'application, et que celle-ci peux inclure 999 bouton et n'est pas limitée à un seul niveau d'indentation OU/ET C'est plus une question d’algorithmie qu'autre chose, mais si quelqu'un avait une idée |
||
|
|
00
|
|
|
#2 |
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
Bonjour,
- peux tu confirmer que tu reçoit cela sous forme de chaine. - peux tu fournir un exemple d'expression complexe. c'est juste pour voir |
|
|
00
|
|
|
#3 |
|
Membre actif
![]() Inscription : avril 2010 Messages : 221 ![]() |
Pour l'expression logique, je pensais:
Et une expression logique "complexe" pourrais être: ((1 OU 2) ET (3 OU 4 OU 5)) OU ((6 OU 7 OU 8 OU (9 ET 10)) ET 11) On aura dans ce cas 10 bouton |
|
|
00
|
|
|
#4 |
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
- A vue de nez, il te faut construire un arbre logique à partir de la commande.
- Peut-il y avoir des doublons de numéro dans la commande, cela influera sûrement sur la structure des nœuds de l'arbre ? - Au final lorsque tu cliques sur un bouton il te faut remettre à jour l'affichage ? PS : pas d'idée à priori, voire de méthode à te proposer. |
|
|
00
|
|
|
#5 | ||
|
Membre actif
![]() Inscription : avril 2010 Messages : 221 ![]() |
Salut,
Citation:
Citation:
En fait, j'ai fait un truc qui fonctionne mais uniquement avec une "profondeur de 3" (qui suffit dan beaucoup de cas), sans utiliser d'expression logique mais avec une notion de groupe et sous-groupe. Mais du coup cela complique la compréhension de l'outil vis à vis de l'utilisateur. L'utilisation d'une expression logique me semble donc plus approprié. Peux-tu m'en dire plus sur la construction d'arbre logique? |
||
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() Thomas Ingénieur développement logiciels Inscription : juillet 2007 Messages : 741 ![]() |
Je pense que ce qu'il veut dire par arbre logique, c'est que tu peux définir une expression booléenne par un arbre :
C'est équivalent à (Val1 OU Val2) ET Val3 |
|
|
00
|
|
|
#7 | ||||
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Oh, pas banal comme problème ça, j'aime bien
En fait tu définis une sorte de langage d'expressions, il te faut donc construire quelque chose qui ressemble à un analyseur de langage. Je me garde ça sous le coude pour quand j'aurai le temps, je vais essayer de faire ça En attendant voilà déjà la partie analyse lexicale (le « lexer »). Code JS :
Code console :
Voir sur le Web : analyseur lexical, analyseur syntaxique, arbre de syntaxe abstraite, etc. C'est peut-être un peu trop lourd pour valoir le coup, mais trop tard, je suis lancé Je vous tiens au courant !
__________________
Disposition de clavier ergonomique française : Bépo |
||||
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Thomas Ingénieur développement logiciels Inscription : juillet 2007 Messages : 741 ![]() |
Ah ouais, joli le lexer en expression régulière, très bonne idée
Tu pourrais remplacer aussi ton \d+ par tout ce qui n'est pas un ET un OU ou des parenthèses et des espaces histoire de pouvoir avoir des identifiant autre que numérique. Mais je chipotte |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Matilin TorreÉtudiant Inscription : juin 2010 Messages : 679 ![]() |
Re,
j'ai eu le temps de commencer un petit bout. J'ai quelques questions pour toi mamax29 : Code :
((1 OU 2) ET (3 OU 4 OU 5)) OU ((6 OU 7 OU 8 OU (9 ET 10)) ET 11) Il faut considérer un ordre de priorité. Par exemple, les ET seront résolus avant les OU. Ou bien, on utilise l'ordre de déclaration (de gauche à droite). Ou encore, on décrète que cette situation est interdite et on oblige à mettre des parenthèses. La structure de mon parseur va pas mal dépendre de la réponse à cette question. Pour l'instant, voilà comment je vois les choses : – Un clic sur un bouton qui est dans un groupe ET n'a pas d'effet sur les autres boutons du groupe. – Un clic sur un bouton qui est dans un groupe OU décoche les autres boutons du groupe. – On traite les sous-groupes de la même manière que les boutons (récursivité). – On n'a pas besoin de propager les effets d'un ET si un élément du groupe était déjà coché. Dis-moi si je fais bonne route De plus, la propagation des OU se fait dans l'autre sens : quand on « dé-presse » un bouton. Est-ce que cette action est possible ? Si oui, il faudra gérer ça également.
__________________
Disposition de clavier ergonomique française : Bépo |
|
|
00
|
|
|
#10 |
![]() ![]() Inscription : janvier 2011 Messages : 2 944 ![]() |
|
|
|
00
|
|
|
#11 | |||
|
Membre actif
![]() Inscription : avril 2010 Messages : 221 ![]() |
Bonjour,
@Watilin: Citation:
Sinon, il faut aussi voir pour la réalisation du paser, ce qui est le plus simple à réaliser. Citation:
![]() Citation:
|
|||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com