begin process at 2010 02 10 11:42:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Maths & Algorithmes

 > ANALYSEUR LEXICAL ET SYNTAXIQUE DES FORMULES PROPOSITIONNELLES [LOGIQUE MATHÉMATIQUE]

ANALYSEUR LEXICAL ET SYNTAXIQUE DES FORMULES PROPOSITIONNELLES [LOGIQUE MATHÉMATIQUE]




 Description

Cliquez pour voir la capture en taille normale
C'est un petit source développé dans les séances de tps du module Logique mathématique.
Il s'agit d'un analyseur lexical et syntaxique des formules propositionnelles (logique propositionnelle).

L'analyseur lexical utilisé est un analyseur ascendant type LR sans précédence d'opérateurs (utilisant une pile pour la synthèse de l'arbre de l'analyse syntaxique (RF Compilation)).
La grammaire utilisée pour l'analyseur syntaxique est tres simple:
S -> F
F -> (F) | F & F | F => F | F <=> F | ~F | F|F

En ce qui concerne l'analyse lexicale, tout est basé sur les automates et la classe Regex

En plus, il permet de calculer la profondeur, la longueur et la complexité de la formule propositionnelle.

Source

  • using System;
  • using System.Collections.Generic;
  • using System.Text.RegularExpressions;
  • using System.Windows.Forms;
  • /**********************************************************************************
  • * Analyseur lexical & syntaxique de formules propositionnelles (logique propositionnelle)
  • * Développé dans les tps du module Logique mathématique (en coop avec Compil)
  • * Boutemine Oualid (L3)
  • * Guetteche Ali (M1)
  • * *********************************
  • * Last code modification 19/01/2009
  • **********************************************************************************/
  • // Chaine de teste: A & B | ~( C => (B <=> ~D)) => A
  • namespace tpLM
  • {
  • public partial class frmMain : Form
  • {
  • #region Automates
  • private string symbols = "()~|=><=>&"; // les symboles
  • // Automate des connecteurs logiques.
  • Regex logicalConnectors = new Regex (@"^\||~|&|=\>|\<=\>$");
  • // automate de recherche d'identificateurs.
  • Regex identifier = new Regex ("^[a-zA-Z_][a-zA-Z0-9_]*$");
  • // automates des parentheses.
  • Regex parentheses = new Regex (@"^\(|\)$");
  • // automates des unités lexicales. [BUG FIXED:\<=\> must appear befor =\> to identify equivalance before implication]
  • Regex lexicalUnits = new Regex (@"[a-zA-Z0-9_]+|\(|\)|\||~|&|\<=\>|=\>");
  • // automates des caracteres illegaux.
  • Regex illegalChars = new Regex (@"[^a-zA-Z0-9()|~&=><_ ]");
  • #endregion
  • /// <summary>
  • /// Retourne la profondeur de l'arbre d'analyse.
  • /// </summary>
  • /// <param name="root">Le sommet de l'arbre d'analyse.</param>
  • /// <returns>La profondeur de l'arbre.</returns>
  • public int GetDepth (TreeNode root)
  • {
  • int depth = 0;
  • // Appels recursives.
  • switch (root.Nodes.Count)
  • {
  • case (0):
  • {
  • depth = 0;
  • break;
  • }
  • case (1):
  • {
  • depth += GetDepth (root.Nodes [0]) + 1;
  • break;
  • }
  • case (2):
  • {
  • depth += Math.Max (GetDepth (root.Nodes [0]), GetDepth (root.Nodes [1])) + 1;
  • break;
  • }
  • }
  • return depth;
  • }
  • /// <summary>
  • /// Retourne la longueur de la formule
  • /// </summary>
  • /// <param name="input">La chaine a comparer.</param>
  • /// <returns>Longueur</returns>
  • public int GetLength (string input)
  • {
  • // Nombre parentheses + Variables propositionnelles + connecteurs logiques
  • return GetParenthesis (input) + GetIdentifiers (input) + GetLogicalConnectors (input);
  • }
  • /// <summary>
  • /// Retourne le nombre de parentheses dans la chaine.
  • /// </summary>
  • /// <param name="input">Chaine a comparer.</param>
  • /// <returns>Nombre de parentheses.</returns>
  • public int GetParenthesis (string input)
  • {
  • int counter = 0;
  • MatchCollection wordsResult = lexicalUnits.Matches (input);
  • // pour chaque mot dans la formule.
  • foreach (Match word in wordsResult)
  • {
  • if (parentheses.IsMatch (word.Value))
  • counter++;
  • }
  • return counter;
  • }
  • /// <summary>
  • /// Retourne le nombre d'identificateurs.
  • /// </summary>
  • /// <param name="input">La chaine a comparer</param>
  • /// <returns>Le nombre d'identificateur.</returns>
  • public int GetIdentifiers (string input)
  • {
  • int counter = 0;
  • MatchCollection wordsResult = lexicalUnits.Matches (input);
  • // pour chaque mot dans la formule.
  • foreach (Match word in wordsResult)
  • {
  • // si c'est un identificateur valide, alors compte le.
  • if (identifier.IsMatch (word.Value))
  • counter++;
  • }
  • return counter;
  • }
  • /// <summary>
  • /// Routine de récupération sur les erreurs lexicales
  • /// </summary>
  • /// <param name="input">La formule propositionnelle</param>
  • /// <returns>Dictionnaire d'erreurs.</returns>
  • public Dictionary<int, string> GetLexicalErrors (string input)
  • {
  • Dictionary<int, string> errors = new Dictionary<int, string> ();
  • // Recherche des caracteres speciaux non reconnues.
  • MatchCollection illegalchars = illegalChars.Matches (input);
  • foreach (Match illegalchar in illegalchars)
  • errors.Add (illegalchar.Index, illegalchar.Value);
  • // Unités lexicales
  • MatchCollection tookens = lexicalUnits.Matches (input);
  • // Pour chaque mot dans la formule
  • foreach (Match tooken in tookens)
  • {
  • // s'il n'est pas un identificateur ou un connecteur ou une parenthese.
  • if (!identifier.IsMatch (tooken.Value) &&
  • !parentheses.IsMatch (tooken.Value) &&
  • !logicalConnectors.IsMatch (tooken.Value))
  • errors.Add (tooken.Index, tooken.Value);
  • }
  • return errors;
  • }
  • /// <summary>
  • /// Retourne le nombre d'operateurs logiques.
  • /// </summary>
  • /// <param name="input">la formule propositionnelle.</param>
  • /// <returns>Le nombre d'operateur</returns>
  • public int GetLogicalConnectors (string input)
  • {
  • int counter = 0;
  • MatchCollection wordsResults = lexicalUnits.Matches (input);
  • lblDepth.Text = wordsResults.Count.ToString ();
  • // Pour chaque mots dans la formule
  • foreach (Match word in wordsResults)
  • {
  • // si le mot est un connecteur logique alors.
  • if (logicalConnectors.IsMatch (word.Value))
  • counter++;
  • }
  • return counter;
  • }
  • /// <summary>
  • /// Retourne la complexité de la chaine (Nombre de connecteurs).
  • /// </summary>
  • /// <param name="input">La chaine a comparer.</param>
  • /// <returns>La complexité.</returns>
  • public int GetComplexity (string input)
  • {
  • return GetLogicalConnectors (input);
  • }
  • /// <summary>
  • /// Représente une production (Regle) dans la grammaire de l'analyseur syntaxique.
  • /// </summary>
  • public struct GrammarRule
  • {
  • /// <summary>
  • /// Créer une nouvelle loie pour la grammaire.
  • /// </summary>
  • /// <param name="value">
  • /// Regle.
  • /// </param>
  • /// <param name="Operator">
  • /// Operateur.
  • /// </param>
  • /// <param name="operandsCount">
  • /// Nombre d'operandes.
  • /// </param>
  • public GrammarRule (string value, string Operator, int operandsCount)
  • {
  • this.Operator = Operator;
  • this.Value = value;
  • this.OperandsCount = operandsCount;
  • }
  • /// <summary>
  • /// Operateur.
  • /// </summary>
  • public string Operator;
  • /// <summary>
  • /// Regle.
  • /// </summary>
  • public string Value;
  • /// <summary>
  • /// Nombre d'operandes.
  • /// </summary>
  • public int OperandsCount;
  • }
  • /// <summary>
  • /// Productions de la grammaire
  • /// </summary>
  • private List<GrammarRule> grammarRules = new List<GrammarRule> ();
  • /// <summary>
  • /// Pile des opérations de synthèse d'arbre (Synthese ascendante).
  • /// </summary>
  • private Stack<TreeNode> nodeStack = new Stack<TreeNode> ();
  • /// <summary>
  • /// Vérifie si la formule est syntaxiquement correcte.
  • /// </summary>
  • /// <param name="input">La forume a vérifier</param>
  • /// <returns>Retourne le resultat de la vérification.</returns>
  • private bool ContainsSyntaxicErrors (string input)
  • {
  • bool error = false;
  • // Pile d'analyse de la chaine
  • string buffer = string.Empty;
  • // Jetons par l'analyseur lexicale.
  • MatchCollection tookensResult = lexicalUnits.Matches (input);
  • /******* Analyseur Syntaxique Ascendant LR********
  • * sans précédence d'opérateurs
  • *******/
  • foreach (Match tooken in tookensResult)
  • {
  • // Etape 1: vérifie le type du jeton: (soit symbole (Connecteur ou parenthese) ou variable propositionnelle.
  • // Si c'est un symbole, l'empiler.
  • if (symbols.Contains (tooken.Value))
  • buffer += tooken.Value;
  • else
  • {
  • // Si c'est une variable propositionnelle (Identificateur).
  • buffer += "F";
  • // Creer un noeud (Nom = Unité Lexicale)
  • TreeNode node = new TreeNode (tooken.Value);
  • // Empiler le noeud.
  • nodeStack.Push (node);
  • }
  • repeat: // Etape 2: Substitions sur la pile d'entrée.
  • foreach (GrammarRule rule in grammarRules)
  • {
  • if (buffer.Contains (rule.Value))
  • {
  • // substition en F
  • buffer = buffer.Replace (rule.Value, "F");
  • // donner pour nom du node l'operateur
  • TreeNode parentNode = new TreeNode (rule.Operator);
  • switch (rule.OperandsCount)
  • {
  • case (1):
  • {
  • // dépiler le noeud en somment de la pile
  • TreeNode node1 = nodeStack.Pop ();
  • // Mettre le noeud dans les sous-noeuds du parent.
  • parentNode.Nodes.Add (node1);
  • // Empiler le parent
  • nodeStack.Push (parentNode);
  • break;
  • }
  • case (2):
  • {
  • // dépiler le noeud en somment de la pile
  • TreeNode node1 = nodeStack.Pop ();
  • TreeNode node2 = nodeStack.Pop ();
  • // Mettre le noeud dans les sous-noeuds du parent.
  • parentNode.Nodes.Add (node2);
  • parentNode.Nodes.Add (node1);
  • // Empiler le parent
  • nodeStack.Push (parentNode);
  • break;
  • }
  • }
  • // Répete l'analyse pour le nouveau buffer.
  • goto repeat;
  • }
  • }
  • }
  • // analyse syntaxique correcte.
  • error = (buffer != "F");
  • if (!error)
  • {
  • // Affichage de l'arbre.
  • trvSyntaxicTree.Nodes.Clear ();
  • trvSyntaxicTree.Nodes.Add (nodeStack.Pop ());
  • }
  • return error;
  • }
  • public frmMain ()
  • {
  • InitializeComponent ();
  • // Initialization du dictionnaire des productions de la grammaire.
  • grammarRules.Add (new GrammarRule ("F&F", "&", 2));
  • grammarRules.Add (new GrammarRule ("F|F", "|", 2));
  • grammarRules.Add (new GrammarRule ("F=>F", "=>", 2));
  • grammarRules.Add (new GrammarRule ("F<=>F", "<=>", 2));
  • grammarRules.Add (new GrammarRule ("(F)", "", 0));
  • grammarRules.Add (new GrammarRule ("~F", "~", 1));
  • }
  • private void btnCalculer_Click (object sender, EventArgs e)
  • {
  • // netoyage de la liste d'erreurs lexicales.
  • lstLexicalErrors.Items.Clear ();
  • // Traitement d'erreurs lexicales.
  • Dictionary<int, string> errors = GetLexicalErrors (txtFormule.Text);
  • // S'il existe des erreurs lexicales, on les affiche et on sort
  • if (errors.Count != 0)
  • {
  • // affichage des erreurs : lexicales.
  • foreach (KeyValuePair<int, string> error in errors)
  • lstLexicalErrors.Items.Add ("Position " + error.Key.ToString () + ": " + error.Value.ToString ());
  • // sort.
  • return;
  • }
  • // Traitement des erreurs syntaxiques.
  • if (ContainsSyntaxicErrors (txtFormule.Text))
  • {
  • lblSyntaxicErrors.Text = "La chaine est syntaxiquement incorrecte";
  • return;
  • }
  • /*** Affichage des resultats. ***/
  • // longueur.
  • lblLenght.Text = GetLength (txtFormule.Text).ToString ();
  • // Complexité.
  • lblComplexity.Text = GetComplexity (txtFormule.Text).ToString ();
  • // Profondeur.
  • lblDepth.Text = GetDepth (trvSyntaxicTree.Nodes [0]).ToString ();
  • }
  • }
  • }
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Forms;

/**********************************************************************************
 * Analyseur lexical & syntaxique de formules propositionnelles (logique propositionnelle)
 * Développé dans les tps du module Logique mathématique (en coop avec Compil)
 * Boutemine Oualid (L3)
 * Guetteche Ali (M1) 
  * *********************************
 * Last code modification 19/01/2009
 **********************************************************************************/
// Chaine de teste: A & B | ~( C => (B <=> ~D)) => A
namespace tpLM
{
        public partial class frmMain : Form
        {

                #region Automates
                private string symbols = "()~|=><=>&";     // les symboles  
                // Automate des connecteurs logiques.
                Regex logicalConnectors = new Regex (@"^\||~|&|=\>|\<=\>$");
                // automate de recherche d'identificateurs.
                Regex identifier = new Regex ("^[a-zA-Z_][a-zA-Z0-9_]*$");
                // automates des parentheses.
                Regex parentheses = new Regex (@"^\(|\)$");
                // automates des unités lexicales. [BUG FIXED:\<=\> must appear befor =\> to identify equivalance before implication]
                Regex lexicalUnits = new Regex (@"[a-zA-Z0-9_]+|\(|\)|\||~|&|\<=\>|=\>");
                // automates des caracteres illegaux.
                Regex illegalChars = new Regex (@"[^a-zA-Z0-9()|~&=><_ ]");
                #endregion


                /// <summary>
                /// Retourne la profondeur de l'arbre d'analyse.
                /// </summary>
                /// <param name="root">Le sommet de l'arbre d'analyse.</param>
                /// <returns>La profondeur de l'arbre.</returns>

                public int GetDepth (TreeNode root)
                {
                        int depth = 0;
                        // Appels recursives.
                        switch (root.Nodes.Count)
                        {
                                case (0):
                                        {
                                                depth = 0;
                                                break;
                                        }
                                case (1):
                                        {
                                                depth += GetDepth (root.Nodes [0]) + 1;
                                                break;
                                        }
                                case (2):
                                        {
                                                depth += Math.Max (GetDepth (root.Nodes [0]), GetDepth (root.Nodes [1])) + 1;
                                                break;
                                        }
                        }
                        return depth;
                }

                /// <summary>
                /// Retourne la longueur de la formule
                /// </summary>
                /// <param name="input">La chaine a comparer.</param>
                /// <returns>Longueur</returns>
                public int GetLength (string input)
                {
                        // Nombre parentheses + Variables propositionnelles + connecteurs logiques
                        return GetParenthesis (input) + GetIdentifiers (input) + GetLogicalConnectors (input);
                }

                /// <summary>
                /// Retourne le nombre de parentheses dans la chaine.
                /// </summary>
                /// <param name="input">Chaine a comparer.</param>
                /// <returns>Nombre de parentheses.</returns>
                public int GetParenthesis (string input)
                {
                        int counter = 0;
                        MatchCollection wordsResult = lexicalUnits.Matches (input);
                        // pour chaque mot dans la formule.
                        foreach (Match word in wordsResult)
                        {
                                if (parentheses.IsMatch (word.Value))
                                        counter++;
                        }
                        return counter;
                }

                /// <summary>
                /// Retourne le nombre d'identificateurs.
                /// </summary>
                /// <param name="input">La chaine a comparer</param>
                /// <returns>Le nombre d'identificateur.</returns>
                public int GetIdentifiers (string input)
                {
                        int counter = 0;
                        MatchCollection wordsResult = lexicalUnits.Matches (input);
                        // pour chaque mot dans la formule.
                        foreach (Match word in wordsResult)
                        {
                                // si c'est un identificateur valide, alors compte le.
                                if (identifier.IsMatch (word.Value))
                                        counter++;
                        }
                        return counter;
                }

                /// <summary>
                ///  Routine de récupération sur les erreurs lexicales
                /// </summary>
                /// <param name="input">La formule propositionnelle</param>
                /// <returns>Dictionnaire d'erreurs.</returns>
                public Dictionary<int, string> GetLexicalErrors (string input)
                {
                        Dictionary<int, string> errors = new Dictionary<int, string> ();
                        // Recherche des caracteres speciaux non reconnues.
                        MatchCollection illegalchars = illegalChars.Matches (input);
                        foreach (Match illegalchar in illegalchars)
                                errors.Add (illegalchar.Index, illegalchar.Value);
                        // Unités lexicales
                        MatchCollection tookens = lexicalUnits.Matches (input);
                        // Pour chaque mot dans la formule
                        foreach (Match tooken in tookens)
                        {
                                // s'il n'est pas un identificateur ou un connecteur ou une parenthese.
                                if (!identifier.IsMatch (tooken.Value) &&
                                    !parentheses.IsMatch (tooken.Value) &&
                                    !logicalConnectors.IsMatch (tooken.Value))
                                        errors.Add (tooken.Index, tooken.Value);
                        }
                        return errors;
                }

                /// <summary>
                /// Retourne le nombre d'operateurs logiques.
                /// </summary>
                /// <param name="input">la formule propositionnelle.</param>
                /// <returns>Le nombre d'operateur</returns>
                public int GetLogicalConnectors (string input)
                {
                        int counter = 0;
                        MatchCollection wordsResults = lexicalUnits.Matches (input);
                        lblDepth.Text = wordsResults.Count.ToString ();
                        // Pour chaque mots dans la formule
                        foreach (Match word in wordsResults)
                        {
                                // si le mot est un connecteur logique alors.
                                if (logicalConnectors.IsMatch (word.Value))
                                        counter++;
                        }
                        return counter;
                }

                /// <summary>
                /// Retourne la complexité de la chaine (Nombre de connecteurs).
                /// </summary>
                /// <param name="input">La chaine a comparer.</param>
                /// <returns>La complexité.</returns>
                public int GetComplexity (string input)
                {
                        return GetLogicalConnectors (input);
                }

                /// <summary>
                /// Représente une production (Regle) dans la grammaire de l'analyseur syntaxique.
                /// </summary>
                public struct GrammarRule
                {
                        /// <summary>
                        /// Créer une nouvelle loie pour la grammaire.
                        /// </summary>
                        /// <param name="value">
                        /// Regle.
                        /// </param>
                        /// <param name="Operator">
                        /// Operateur.
                        /// </param>
                        /// <param name="operandsCount">
                        /// Nombre d'operandes.
                        /// </param>
                        public GrammarRule (string value, string Operator, int operandsCount)
                        {
                                this.Operator = Operator;
                                this.Value = value;
                                this.OperandsCount = operandsCount;
                        }
                        /// <summary>
                        /// Operateur.
                        /// </summary>
                        public string Operator;
                        /// <summary>
                        /// Regle.
                        /// </summary>
                        public string Value;
                        /// <summary>
                        /// Nombre d'operandes.
                        /// </summary>
                        public int OperandsCount;
                }
                /// <summary>
                /// Productions de la grammaire
                /// </summary>
                private List<GrammarRule> grammarRules = new List<GrammarRule> ();
                /// <summary>
                /// Pile des opérations de synthèse d'arbre (Synthese ascendante).
                /// </summary>
                private Stack<TreeNode> nodeStack = new Stack<TreeNode> ();
                /// <summary>
                /// Vérifie si la formule est syntaxiquement correcte.
                /// </summary>
                /// <param name="input">La forume a vérifier</param>
                /// <returns>Retourne le resultat de la vérification.</returns>
                private bool ContainsSyntaxicErrors (string input)
                {
                        bool error = false;
                        // Pile d'analyse de la chaine
                        string buffer = string.Empty;
                        // Jetons par l'analyseur lexicale.
                        MatchCollection tookensResult = lexicalUnits.Matches (input);
                        /******* Analyseur Syntaxique Ascendant LR********
                         * sans précédence d'opérateurs
                         *******/
                        foreach (Match tooken in tookensResult)
                        {
                                // Etape 1: vérifie le type du jeton: (soit symbole (Connecteur ou parenthese) ou variable propositionnelle.
                                // Si c'est un symbole, l'empiler.
                                if (symbols.Contains (tooken.Value))
                                        buffer += tooken.Value;
                                else
                                {
                                        // Si c'est une variable propositionnelle (Identificateur).
                                        buffer += "F";
                                        // Creer un noeud (Nom = Unité Lexicale)
                                        TreeNode node = new TreeNode (tooken.Value);
                                        // Empiler le noeud.
                                        nodeStack.Push (node);
                                }
                        repeat:                // Etape 2: Substitions sur la pile d'entrée.
                                foreach (GrammarRule rule in grammarRules)
                                {
                                        if (buffer.Contains (rule.Value))
                                        {
                                                // substition en F
                                                buffer = buffer.Replace (rule.Value, "F");
                                                // donner pour nom du node l'operateur
                                                TreeNode parentNode = new TreeNode (rule.Operator);
                                                switch (rule.OperandsCount)
                                                {
                                                        case (1):
                                                                {
                                                                        // dépiler le noeud en somment de la pile
                                                                        TreeNode node1 = nodeStack.Pop ();
                                                                        // Mettre le noeud dans les sous-noeuds du parent.
                                                                        parentNode.Nodes.Add (node1);
                                                                        // Empiler le parent
                                                                        nodeStack.Push (parentNode);
                                                                        break;
                                                                }
                                                        case (2):
                                                                {
                                                                        // dépiler le noeud en somment de la pile
                                                                        TreeNode node1 = nodeStack.Pop ();
                                                                        TreeNode node2 = nodeStack.Pop ();
                                                                        // Mettre le noeud dans les sous-noeuds du parent.
                                                                        parentNode.Nodes.Add (node2);
                                                                        parentNode.Nodes.Add (node1);
                                                                        // Empiler le parent
                                                                        nodeStack.Push (parentNode);
                                                                        break;
                                                                }
                                                }
                                                // Répete l'analyse pour le nouveau buffer.
                                                goto repeat;
                                        }
                                }
                        }
                        // analyse syntaxique correcte.
                        error = (buffer != "F");
                        if (!error)
                        {
                                // Affichage de l'arbre.
                                trvSyntaxicTree.Nodes.Clear ();
                                trvSyntaxicTree.Nodes.Add (nodeStack.Pop ());
                        }
                        return error;
                }

                public frmMain ()
                {
                        InitializeComponent ();
                        // Initialization du dictionnaire des productions de la grammaire.
                        grammarRules.Add (new GrammarRule ("F&F", "&", 2));
                        grammarRules.Add (new GrammarRule ("F|F", "|", 2));
                        grammarRules.Add (new GrammarRule ("F=>F", "=>", 2));
                        grammarRules.Add (new GrammarRule ("F<=>F", "<=>", 2));
                        grammarRules.Add (new GrammarRule ("(F)", "", 0));
                        grammarRules.Add (new GrammarRule ("~F", "~", 1));
                }

                private void btnCalculer_Click (object sender, EventArgs e)
                {
                        // netoyage de la liste d'erreurs lexicales.
                        lstLexicalErrors.Items.Clear ();
                        // Traitement d'erreurs lexicales.
                        Dictionary<int, string> errors = GetLexicalErrors (txtFormule.Text);
                        // S'il existe des erreurs lexicales, on les affiche et on sort
                        if (errors.Count != 0)
                        {
                                // affichage des erreurs : lexicales.
                                foreach (KeyValuePair<int, string> error in errors)
                                        lstLexicalErrors.Items.Add ("Position " + error.Key.ToString () + ": " + error.Value.ToString ());
                                // sort.
                                return;
                        }

                        // Traitement des erreurs syntaxiques.
                        if (ContainsSyntaxicErrors (txtFormule.Text))
                        {
                                lblSyntaxicErrors.Text = "La chaine est syntaxiquement incorrecte";
                                return;
                        }

                        /*** Affichage des resultats. ***/
                        // longueur.
                        lblLenght.Text = GetLength (txtFormule.Text).ToString ();
                        // Complexité.
                        lblComplexity.Text = GetComplexity (txtFormule.Text).ToString ();
                        // Profondeur.
                        lblDepth.Text = GetDepth (trvSyntaxicTree.Nodes [0]).ToString ();
                }
        }
}

 Conclusion

C'est un tres bon exemple pour l'implementation d'une grammaire d'une calculatrice ou d'un traceur de courbes.

Bon prog

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) PROTEGER SON APPLICATION, AUTHENTIFICATION PAR COMPTES SYSTÈ...
Source avec Zip Source avec une capture Source .NET (Dotnet) GESTION DES SERVICES WINDOWS
Source avec Zip Source .NET (Dotnet) CREATION DES POINTS DE RESTAURATION SYSTÈME
Source avec Zip Source avec une capture Source .NET (Dotnet) SAVOIR L'ADRESSE PHYSIQUE (MAC) DES CARTES RÉSEAUX DE L'ORDI...
Source avec Zip Source .NET (Dotnet) [DÉBUTANTS] ANIMATION DES FENETRES, CHARME SPÉCIALE POUR VOT...

 Sources de la même categorie

RECHERCHE DE DEUX SOUS ENSEMBLE DONT LES SOMMES DES ÉLÈMENTS... par deadhand
Source avec Zip Source avec une capture Source .NET (Dotnet) METHODE GRAPHIQUE EN PROGRAMMATION LINÉAIRE par vindos
Source avec Zip Source avec une capture Source .NET (Dotnet) RECTANGLES par krissssss
Source avec Zip Source avec une capture SODOKU MUSING (PERMUTATION & SODOKU) par krissssss
Source avec Zip Source avec une capture Source .NET (Dotnet) APPLICATION TRACEUR DE COURBE par Kite37

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) STROMPEDIA : ANALYSER LE SENS DES MOTS (C#/MYSQL/PHP) par djine
Source avec Zip Source .NET (Dotnet) ANALYSE DE LA LIGNE DE COMMANDE POUR LES APPLICATIONS EN MOD... par dgouttegattat

Commentaires et avis

Commentaire de zakizaki7 le 31/05/2009 20:56:14 9/10

merci bcp pour le source

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

ListView et analyse syntaxique automatique [ par Hartwood ] Salut à tousMon problèmes est assez simple mais compliqué en même temps! :-)J'utilise (en C#) une listView qui me sert de liste de completion pour un Analyse spectrale de la voix. [ par naoufal_chatt ] Pour la mise en ½uvre d 'un logiciel en vue d'echange de donnees de type voix sur un reseau je me demande si quelque un d entre vous a deja travaille Coloration syntaxique [ par JaimeLinux ] &nbsp;&nbsp;&nbsp; Bonjour, &nbsp;Je voudrais savoir comment changer la mise en forme de mots dans un RichTextBox sans s&#233;lectionner auparavant ce javascript dans c#? [ par engelho ] Bonjour,J'aurais voulu savoir s'il est possible d'ins&#233;rer du code javascript dans mon code c#....par exemple :<FONT size=3 etat des lecteurs logiques [ par fethijemai ] bonjour saviez vous comment savoir l'&#233;tat d'un lecteur logique(actif,bloqu&#233;), &nbsp;d&#233;sactriver et activer un lecteur logique (exp&nbsp Analyse de l'activé reseau demon PC [ par ZeBFroG ] Bonjour &#224; tous,Voil&#224; je recherche de l'aide pour d&#233;velopper un code me permettant de surveillerl'activit&#233; de ma carte r&#233;seau. logique de connexion à une bdd [ par georgeduke ] Salut les gens !! J'ai appris gr&#226;ce &#224; ce site notamment comme se connecter en c# &#224; une bdd et &#224; ex&#233;cuter des requ&#234;tes. Thread probleme d'acces a des controles [ par warenbe ] Yop j'ai un probleme j'ai une fonction quia une boucle qui dure treeeeeeeeeeeeees longtemps (quelques milliers d'entree a verifier une par une et c'es un rtb avec coloration syntaxique !! [ par Fildomen ] Salut !!j'ai programmé un ptit scripting !! mais il me faut un richtextbox avec colorisation syntaxique !! je cherche quelque chose déjà faite :D parc Lecteur logique récemment connecté [ par MrContent ] Salut,Je suis en train de faire un prog pour gérer mes contacts. Je veux pouvoir syncrhoniser ces infos avec mon iPod... J'ai un listener qui écoute l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,624 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales