OVH Cloud OVH Cloud

Cherche analyseur syntaxique algébrique

8 réponses
Avatar
JFA
Bonjour
Je voudrais programmer un analyseur syntaxique pour transformer une ligne de
calculs numériques (ex : 2*(4+5/(3-1))) en son résultat.
Quelqu'un pourrait-il m'orienter vers des adresses de sites ou des sources
ou des algorithmes?
Merci
jfa

8 réponses

Avatar
Trognon Patrice
JFA wrote:

Bonjour
Je voudrais programmer un analyseur syntaxique pour transformer une ligne
de calculs numériques (ex : 2*(4+5/(3-1))) en son résultat.
Quelqu'un pourrait-il m'orienter vers des adresses de sites ou des sources
ou des algorithmes?
Merci
jfa


bonjour,

A chaque fois que j'ai eu besoin d'utiliser ce genre de chose j'ai utilisé
la notation polonaise inverse, cela simplifie énormément l'écriture de
l'analyseur.

par exemple ton expression 2*(4+5/(3-1)) s'écrit en Polonaise Inversé :
1> 2
2> 4
3> 5
4> +
5> 3
6> 1
7> -
8> /
9> *

tout repose sur une gestion de pile, voici l'explication instruction
par instruction :
1> place la valeur 2 en pile
2> place la valeur 4 en pile
3> place la valeur 5 en pile
4> applique l'opérateur + sur la valeur 5 et 4,
puis place le résultat en pile
ta pile est donc : 2 9 après cette operation.
5> place la valeur 3 en pile
6> place la valeur 1 en pile
7> applique l'opérateur - sur la valeur 3 et 1,
puis place le résultat en pile.
ta pile est donc : 2 9 2
8> applique l'opérateur / sur la valeur 9 et 2,
puis place le résultat en pile.
ta pile est donc : 2 4.5
9> applique l'opérateur * sur la valeur 2 et 4.5
puis place le résultat en pile.
ta pile est donc : 9
ce qui est le résultat.

L'avantage c'est que tu n'as pas à gérer les parenthèses sur l'analyseur
syntaxique.

Voila, maintenant si tu veux absolument développer un analyseur syntaxique
avec une gestion des parenthèses, regarde du coté de lex / yacc.

--
Cordialement,

Patrice Trognon
http://www.javadevel.com

Avatar
jlp
JFA wrote:


Bonjour
Je voudrais programmer un analyseur syntaxique pour transformer une ligne
de calculs numériques (ex : 2*(4+5/(3-1))) en son résultat.
Quelqu'un pourrait-il m'orienter vers des adresses de sites ou des sources
ou des algorithmes?
Merci
jfa



bonjour,

A chaque fois que j'ai eu besoin d'utiliser ce genre de chose j'ai utilisé
la notation polonaise inverse, cela simplifie énormément l'écriture de
l'analyseur.

par exemple ton expression 2*(4+5/(3-1)) s'écrit en Polonaise Inversé :
1> 2
2> 4
3> 5
4> +
5> 3
6> 1
7> -
8> /
9> *

tout repose sur une gestion de pile, voici l'explication instruction
par instruction :
1> place la valeur 2 en pile
2> place la valeur 4 en pile
3> place la valeur 5 en pile
4> applique l'opérateur + sur la valeur 5 et 4,
puis place le résultat en pile
ta pile est donc : 2 9 après cette operation.
5> place la valeur 3 en pile
6> place la valeur 1 en pile
7> applique l'opérateur - sur la valeur 3 et 1,
puis place le résultat en pile.
ta pile est donc : 2 9 2
8> applique l'opérateur / sur la valeur 9 et 2,
puis place le résultat en pile.
ta pile est donc : 2 4.5
9> applique l'opérateur * sur la valeur 2 et 4.5
puis place le résultat en pile.
ta pile est donc : 9
ce qui est le résultat.

L'avantage c'est que tu n'as pas à gérer les parenthèses sur l'analyseur
syntaxique.

Voila, maintenant si tu veux absolument développer un analyseur syntaxique
avec une gestion des parenthèses, regarde du coté de lex / yacc.

ou javacc



Avatar
Trognon Patrice
jlp wrote:

JFA wrote:


Bonjour
Je voudrais programmer un analyseur syntaxique pour transformer une ligne
de calculs numériques (ex : 2*(4+5/(3-1))) en son résultat.
Quelqu'un pourrait-il m'orienter vers des adresses de sites ou des
sources ou des algorithmes?
Merci
jfa



bonjour,

A chaque fois que j'ai eu besoin d'utiliser ce genre de chose j'ai
utilisé la notation polonaise inverse, cela simplifie énormément
l'écriture de l'analyseur.

par exemple ton expression 2*(4+5/(3-1)) s'écrit en Polonaise Inversé :
1> 2
2> 4
3> 5
4> +
5> 3
6> 1
7> -
8> /
9> *

tout repose sur une gestion de pile, voici l'explication instruction
par instruction :
1> place la valeur 2 en pile
2> place la valeur 4 en pile
3> place la valeur 5 en pile
4> applique l'opérateur + sur la valeur 5 et 4,
puis place le résultat en pile
ta pile est donc : 2 9 après cette operation.
5> place la valeur 3 en pile
6> place la valeur 1 en pile
7> applique l'opérateur - sur la valeur 3 et 1,
puis place le résultat en pile.
ta pile est donc : 2 9 2
8> applique l'opérateur / sur la valeur 9 et 2,
puis place le résultat en pile.
ta pile est donc : 2 4.5
9> applique l'opérateur * sur la valeur 2 et 4.5
puis place le résultat en pile.
ta pile est donc : 9
ce qui est le résultat.

L'avantage c'est que tu n'as pas à gérer les parenthèses sur l'analyseur
syntaxique.

Voila, maintenant si tu veux absolument développer un analyseur
syntaxique avec une gestion des parenthèses, regarde du coté de lex /
yacc.

ou javacc



oups, désolé, j'avais oublié que c'etait le NG java (lol) :)


--
Cordialement,

Patrice Trognon
http://wwW.javadevel.com



Avatar
SL
JFA wrote:
Bonjour
Je voudrais programmer un analyseur syntaxique pour transformer une ligne de
calculs numériques (ex : 2*(4+5/(3-1))) en son résultat.
Quelqu'un pourrait-il m'orienter vers des adresses de sites ou des sources
ou des algorithmes?
Merci
jfa




c'est pas un peu tard pour les projets de fin d'annee ?? :)))

--
SL

Avatar
JFA
A chaque fois que j'ai eu besoin d'utiliser ce genre de chose j'ai utilisé
la notation polonaise inverse, cela simplifie énormément l'écriture de
l'analyseur.
Merci mais je connais la polonaise. Seulement je vois mal mes élèves de

collège l'utiliser.
J'espérai naïvement tomber sur quelqu'un qui aurait programmé un truc dans
le genre.
jfa

Avatar
Christophe Roudet
Regarde
http://www.singularsys.com/jep/index.html
http://www.bestcode.com/html/jbcparser.html

Chirstophe

"JFA" wrote in message
news:428121e8$0$3168$
A chaque fois que j'ai eu besoin d'utiliser ce genre de chose j'ai
utilisé
la notation polonaise inverse, cela simplifie énormément l'écriture de
l'analyseur.
Merci mais je connais la polonaise. Seulement je vois mal mes élèves de

collège l'utiliser.
J'espérai naïvement tomber sur quelqu'un qui aurait programmé un truc dans
le genre.
jfa




Avatar
Trognon Patrice
JFA wrote:

A chaque fois que j'ai eu besoin d'utiliser ce genre de chose j'ai
utilisé la notation polonaise inverse, cela simplifie énormément
l'écriture de l'analyseur.
Merci mais je connais la polonaise. Seulement je vois mal mes élèves de

collège l'utiliser.
J'espérai naïvement tomber sur quelqu'un qui aurait programmé un truc dans
le genre.
jfa


Ben je vois mal aussi tes eleves de college programmer un analyseur
syntaxique d'expression mathematiques en gérant les parenthèses :)

tu crois pas ?

Ca me semble bcp plus compliqué a coder que systeme de polonaise
inverse, surtout en java ou les classes de collections existent déjà !

--
Cordialement,

Patrice Trognon
http://wwW.javadevel.com


Avatar
JFA
Merci Christophe.
C'est bien ce que je cherchais.
jfa