Analyse d'expressions mathématiques en C
Pour analyser efficacement les expressions mathématiques, une représentation structurée, telle qu'un arbre d'analyse, est vitale. Considérons le problème de représenter l'expression "(a b)c-(d-e)f/g" comme un arbre.
Algorithme de gare de triage
L'algorithme Shunting-yard est une approche bien connue pour analyser des expressions mathématiques. Il suit ces étapes :
-
Analyse d'entrée : Analysez l'expression caractère par caractère et identifiez les jetons (par exemple, les opérateurs, les opérandes, les parenthèses).
-
Pile d'opérateurs : Créez une pile pour stocker les opérateurs.
-
File d'attente de sortie : Créez une file d'attente pour stocker l'expression analysée.
-
Traitement :Pour chaque jeton rencontré :
-
Opérande :Ajouter l'opérande à la file d'attente de sortie.
-
Parenthèse gauche : Poussez-le sur la pile des opérateurs.
-
Parenthèse droite : Faites sortir les opérateurs de la pile jusqu'à ce que la parenthèse gauche soit rencontrée et ajoutez-les à la file d'attente de sortie.
-
Opérateur :
- Si la pile d'opérateurs est vide ou ne contient que des parenthèses, poussez l'opérateur sur la pile.
- Sinon, faites sortir les opérateurs de priorité supérieure de la pile. et ajoutez-les à la file d'attente de sortie jusqu'à ce que la pile d'opérateurs soit vide ou que l'opérateur suivant ait une priorité plus élevée.
- Ensuite, poussez l'opérateur actuel sur la pile.
-
Flush Stack : Après avoir traité tous les jetons, extrayez tous les opérateurs de la pile et ajoutez-les à la file d'attente de sortie.
Exemple
L'utilisation de l'algorithme Shunting-yard avec l'expression "(a b)c-(d-e)f/g" donne l'arbre suivant :
Node(+:
- Node(a)
- Node(b))
- Node(*:
- Node(c)
- Node(-:
- Node(d)
- Node(e))
- Node(/:
- Node(f)
- Node(g)))
Copier après la connexion
Autres options
En plus de l'algorithme Shunting-yard, vous pouvez également écrire une grammaire formelle et utiliser une bibliothèque d'analyse. Les grammaires d'expression d'analyse (PEG) conviennent à cet effet, et des bibliothèques C/C existent pour l'analyse PEG.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!