Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Interpréteur de formules logiques en Java ?

4 réponses
Avatar
mc31
Bonjour =E0 tous,

J'ai une application web J2EE =E0 faire =E9voluer qui contient un =E9cran
avec des crit=E8res de recherche. L'utilisateur renseigne les crit=E8res
et lors du clic sur un bouton "valider", une requ=EAte SQL est
ex=E9cut=E9e vers la base de donn=E9es et renvoie les r=E9sultats =E0
l'=E9cran (fonctionnement classique).

Actuellement les crit=E8res de recherche peuvent =EAtre renseign=E9s
simplement avec une valeur. Par exemple, si un crit=E8re est renseign=E9
avec la valeur A ma requ=EAte SQL sera du type : select * from table
where crit=E8re =3D 'A'

Aujourd'hui, on me demande de prendre en compte l'utilisation de
formules logiques dans les crit=E8res de recherche. Par exemple un
crit=E8re pourra =EAtre renseign=E9 avec une cha=EEne du type

((A ET B) OU (C SAUF D)) ET E ...

Et il me faudra alors convertir cette cha=EEne en requ=EAte SQL.

Ma question est donc de savoir s'il existe une API ou m=E9thode
quelconque permettant d'interpr=E9ter les formules logiques (ET, OU,
SAUF et parenth=E8ses) ou alors faut il tout d=E9velopper ?

Merci d'avance pour vos r=E9ponses

Marie

4 réponses

Avatar
Insitu
"mc31" writes:


Aujourd'hui, on me demande de prendre en compte l'utilisation de
formules logiques dans les critères de recherche. Par exemple un
critère pourra être renseigné avec une chaîne du type

((A ET B) OU (C SAUF D)) ET E ...

Et il me faudra alors convertir cette chaîne en requête SQL.

Ma question est donc de savoir s'il existe une API ou méthode
quelconque permettant d'interpréter les formules logiques (ET, OU,
SAUF et parenthèses) ou alors faut il tout développer ?



Peut être regarder du côté de EL, le langage d'expression utilisé dans
les JSP. Sinon, c'est pas vraiment compliqué à redévelopper:
1. écrire une grammaire avec p.ex. antlr, javacc ou jcup. Très
probablement, la grammaire existe déjà en tant que démo dans l'un ou l'autre
2. définir l'AST (si ce n'est pas fait)
3. définir un "visiteur" pour générer une chaîne SQL (ou n'importe
quoi d'autre en parcourant l'AST)

Pour info, un pb similaire:
http://www.oqube.com/projects/object-traversal/visitor.html

HTH

insitu.

Avatar
mc31
Merci beaucoup pour ces éléments de réponse.
J'avais déjà entendu parler de antlr mais ça m'avait paru complexe
à mettre en oeuvre rapidement. Par ailleurs qu'entends tu par AST ?

Merci d'avance
Marie


"mc31" writes:


Aujourd'hui, on me demande de prendre en compte l'utilisation de
formules logiques dans les critères de recherche. Par exemple un
critère pourra être renseigné avec une chaîne du type

((A ET B) OU (C SAUF D)) ET E ...

Et il me faudra alors convertir cette chaîne en requête SQL.

Ma question est donc de savoir s'il existe une API ou méthode
quelconque permettant d'interpréter les formules logiques (ET, OU,
SAUF et parenthèses) ou alors faut il tout développer ?



Peut être regarder du côté de EL, le langage d'expression utilisé dans
les JSP. Sinon, c'est pas vraiment compliqué à redévelopper:
1. écrire une grammaire avec p.ex. antlr, javacc ou jcup. Très
probablement, la grammaire existe déjà en tant que démo dans l'un ou l'autre
2. définir l'AST (si ce n'est pas fait)
3. définir un "visiteur" pour générer une chaîne SQL (ou n'impor te
quoi d'autre en parcourant l'AST)

Pour info, un pb similaire:
http://www.oqube.com/projects/object-traversal/visitor.html

HTH

insitu.



Avatar
TestMan
Bonjour à tous,

J'ai une application web J2EE à faire évoluer qui contient un écran
avec des critères de recherche. L'utilisateur renseigne les critères
et lors du clic sur un bouton "valider", une requête SQL est
exécutée vers la base de données et renvoie les résultats à
l'écran (fonctionnement classique).

Actuellement les critères de recherche peuvent être renseignés
simplement avec une valeur. Par exemple, si un critère est renseigné
avec la valeur A ma requête SQL sera du type : select * from table
where critère = 'A'

Aujourd'hui, on me demande de prendre en compte l'utilisation de
formules logiques dans les critères de recherche. Par exemple un
critère pourra être renseigné avec une chaîne du type

((A ET B) OU (C SAUF D)) ET E ...

Et il me faudra alors convertir cette chaîne en requête SQL.

Ma question est donc de savoir s'il existe une API ou méthode
quelconque permettant d'interpréter les formules logiques (ET, OU,
SAUF et parenthèses) ou alors faut il tout développer ?

Merci d'avance pour vos réponses

Marie




Bonjour,

Une première voie serait javax.el : création d'un contexte contenant les
champs possible et ensuite passer la chaine pour coinstruire
l'expression que vous devrez ensuite parcourir pour reconstruire sous
forme SQL. Inconvénient : vous ne maitriserez pas la syntaxe de
l'expression !

Vous pouvez essayer de
http://kinetic.ac.donetsk.ua/JEL/


Ma solution préférée, vos utilisateurs semblent vouloir "plus de
liberté" dans l'exécution des requètes exécutées. Pourquoi ne pas
envisager un cube OLAP "restreint" avec Mondrian/JPivot par exemple ?

http://jpivot.sourceforge.net/temp-N1018C.html

A+
TM

Avatar
Laurent Pointal
Merci beaucoup pour ces éléments de réponse.
J'avais déjà entendu parler de antlr mais ça m'avait paru complexe
à mettre en oeuvre rapidement. Par ailleurs qu'entends tu par AST ?


Arbre Syntaxique Abstrait

http://fr.wikipedia.org/wiki/AST