CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Projet similaire à une calculatrice

lag-it
lag-it
Niveau 10
02 décembre 2004 à 13:19:31

Salut, j´ai l´intention de me lancer dans un petit projet qui pourrait s´apparenter à une sorte de calculatrice, et j´aimerai savoir si vous ne connaitriez pas un tutoriel expliquant comment fonctionne l´analyse syntaxique ( car c´est je crois ce dont j´ai besoin :doute: )
En clair je voudrais pouvoir entrer une expression du genre :

1+(3*4-2)

Et que mon programme l´évalue en tenant bien sur compte de la préséance des opérateurs qui la compose.

lag-it
lag-it
Niveau 10
02 décembre 2004 à 13:20:44

Non c´est pas l´analyse lexicale, mais disons l´évaluation d´expressions :)

JeanYvesYves
JeanYvesYves
Niveau 10
02 décembre 2004 à 16:51:28

J avais fait un prog comme ca en C, en licence, je t enverrai le code si tu veux, mais il est sale.
L idee est simple : tu geres ca dans un ARBRE BINAIRE :

chaque noeud est un signe +-*/
et chaque feuille est un nombre ( ou un inconnu genre x si tu veux aller plus loin)
le bordel c est pour les nombres negatifs : mais astuce :
-5 < => 0-5 ce qui vire l exception...

Pour construire l arbres, lit de gauche a droite : il te fait une fonction qui soit capable de reconnaitre si le caractere sur lequel tu es est une parenthese, un signe ou un nombre...
Si c est un nombre, tu break
si c est une parenthese, tu crees un nouveau fils...
Etc etc...

tu vois le principe ?

lag-it
lag-it
Niveau 10
02 décembre 2004 à 17:32:28

Ouai merci JYY, je vais faire un essai :ok:

lag-it
lag-it
Niveau 10
02 décembre 2004 à 17:54:51

http://www710.univ-lyon1.fr/~ameyer/teaching/l3-algo/tp/tp6_l3algo.html

Ca donne des pistes de réflexion sur le sujet.

Je travaille avec de la logique combinatoire, donc c´est encore plus simple :)

i_am_the_law
i_am_the_law
Niveau 6
02 décembre 2004 à 19:20:40

Le plus simple c´est de faire ca avec une grammaire.
Tu peux chercher des infos sur les grammaires LL1, comment on construit une table d´analyse...etc
Apres cherches ds google traduction dirigee par la syntaxe / attributs herites, synthetises..etc

En general on trouve toujours l´arithmetique de base dans les exemples de cours.

1ers liens sur google :
http://fastnet.univ-brest.fr/~gire/COURS/COMPIL_IUP/node37.html

http://fastnet.univ-brest.fr/~gire/COURS/COMPIL_IUP/node60.html

NeImOs_007
NeImOs_007
Niveau 7
02 décembre 2004 à 19:49:00

ça doit etre chaud a faire!

lag-it
lag-it
Niveau 10
02 décembre 2004 à 19:53:01

i_am_the_law > Grammaire ? Pour des expression type mathématique ? La solution de JYY me semble plus adaptée, mais j´ai pas encore fini.

neimos_007 > Avec un arbre binaire ca ddevient tout de suite beaucoup plus simple :)

i_am_the_law
i_am_the_law
Niveau 6
02 décembre 2004 à 20:37:36

Dans les langages de programmations les expressions mathematiques sont reconnues avec une grammaire.
L´avantage c´est que tu peux facilement rajouter des choses. Par ex pour rajouter les fonctions ( sin(..) ln(..)) si tu as deja la grammaire des expressions arithmetiques, c´est tres facile. Tu rajoues 2-3 regles et ca roule tout seul.

dnob700
dnob700
Niveau 10
02 décembre 2004 à 21:39:59

ya ce tuto qui est vraiment très bon : http://www.dil.univ-mrs.fr/~garreta/Polys/PolyCompil.pdf

et j´en connaissais un qui était carrément excellent, mais je n´arrive pas à la retrouver, il expliquait comment passé d´une notation infixé ( la notation normale pour les math) à une notation postfixé ( ce qui estplus simple pour l´interprétation) donc exactement ce qu´il te faut.

je l´avais trouvé en faisant une recherche sur le RPN, bon, si qqn retrouve ça, ça serait parfait pour ici.

JeanYvesYves
JeanYvesYves
Niveau 10
03 décembre 2004 à 18:34:30

I am the law te propose la solution grammaire qui est tres bonne : elle generalise tout, les compilateurs marchent par analyse avec de la grammaire d expression.
La solution que je te propose n est ni plus ni moins qu une grammaire ( assez) simplifiee dans le cas des expressions regulieres, sans l etre vraiment, mais il y a la notion d arbre et de recursivite :)

sinon le TP sur lequel tu te bases, lol !
http://www710.univ-lyon1.fr
C est la que j ai fait mes etudes ! ! ( avec I am the law)
Le TP dont j ai la source est presque le meme, puisqu en 2 ans, ca a un peu change mais bon.

PS perso pour I am the law : Comment vas tu I am the law ? Quand est ce que tu remontes sur Lyon qu on aille se faire un mac do ?

i_am_the_law
i_am_the_law
Niveau 6
03 décembre 2004 à 20:36:01

Vi ta methode c´est un peu du bidouillage, est-ce qu´on cree rajoute un fils a droite a gauche, ou en tant que pere...etc
Avec une grammaire c´est plus intuitif je trouve. On se prend moins la tete avec l´ordre des operations, le bon parenthesage..etc

JYY> D´ici une semaine ou deux, t´es rentre toi? t´as fini de bronzer? ; )

lag-it
lag-it
Niveau 10
03 décembre 2004 à 20:38:22

Je regarderai tout ca ce week-end :)

lag-it
lag-it
Niveau 10
04 décembre 2004 à 14:15:01

Bon j´ai déjà un petit bout de programme qui me construit un arbre à partir d´une expression entrée, mais j´aimerai savoir à présent quelle est la meilleure manière de procéder afin d´évaluer/calculer la dite exprssion contenue dans l´arbre.
J´ai pensé à 2 manières de procéder :

:d) A l´aide d´une fonction récursive à laquelle je passe la racine de l´arbre puis qui se charge de s´appeler elle même jusqu´à ce qu´elle parvienne aux feuilles : cela fonctionne très bien, mais dès que l´arbre est trop volumineux, ca plante : problème de mémoire lié à la récursivité.

:d) Ou alors j´ai eu l´idée d´un truc que je n´ai pas encore testé mais qui m´a l´air pas mal : associer à chaque noeud une variable " niveau" qui renferme sa " hauteur" au sein de l´arbre : le noeud principal/racine a ainsi le niveau 0, les noeuds principaux de l´arbre fils gauche et de l´arbre fils droit 1, etc...
Et évaluer chaque expression noeud en commencant par celles qui occupent les niveaux les plus hauts dans l´arbre jusqu´aux plus basses.
Cette dernière m´a l´air assez chouette et je vais m´y mettre, mais j´aurais aimé savoir s´il n´existait pas par hasard une " méthode ultime" :)

lag-it
lag-it
Niveau 10
04 décembre 2004 à 16:16:35

Ehm, sinon concernant la préséance des opérateurs, quelle est la manière la plus élégante de procéder ( ex : * prime sur l´addition/est exécutée avant)
J´utilise un truc pas très propre qui est obligé de lire 2 fois l´expression...

dnob700
dnob700
Niveau 10
04 décembre 2004 à 18:09:57

tu dit que l´arbre plante s´il est trop gros, ça me semble étrange.

car dans un cas comme ça, il n´y aura pas plus d´appel sur la pile que de niveaudans l´arbre, et même une très grosse expression, ferait peut-être une centaine d´opérateur ( et encore, c´est vraiment bcp), donc on pourrait dire quelque chose comme 10 ou peut-être 50 au maximum de niveau dans l´arbre ( par niveau, j´appel le le plus long chemin entre la racine et l´une des feuille). de là à faire planter un PC moderne ça m´étonerait.

t´es sur qu´il y a pas un bug dans ta récursivité ?

tu fait du camL chez toi ( en prépa je veux dire) ? ou du pascal ?

lag-it
lag-it
Niveau 10
04 décembre 2004 à 19:30:23

Pour le plantage : certes il ne survient qu´avec de très grosses expresions, mais pour tester le générateur d´arbre, j´avais écrit un générateur d´exprssion aléatoires :)
Et dès qu´on a une très grosse expression ( ce qui n´arrive pr)

lag-it
lag-it
Niveau 10
04 décembre 2004 à 19:33:06

[je continue] ( ce qui n´arrive pratiquement jamais dans la réalité) ca plante lorsqu´il faut générer les appels récursifs de la fonction de résolution afin d´obtenir la valeur de l´expression.

Je pourrais me contenter d´un truc itératif, maisje veux un truc beau :)

lag-it
lag-it
Niveau 10
04 décembre 2004 à 19:33:30

Et sinon dès janvier je ferais du CAML si je prends option infos :)

lag-it
lag-it
Niveau 10
05 décembre 2004 à 00:18:47

up :)

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment