Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Analyseur syntaxique en C


Messages recommandés

Posté(e)

:P

 

 

quelqu'un pourrait m'expliquer la marche a suivre pour programmer un analyseur syntaxique en C svp

pour linstant le but est d'analyser une relation simple(expression, terme, parentheses, operateurs + - * /) dc un calcul assez simple

mais je ne comprends pas bien la maniere de le faire

est-ce ke je dois programmer des syntaxes en déclarations?

j'ai décidé d'utiliser un arbre binaire par la suite pour pouvoir decomposer le calcul mais je n'arrive vraiment pas a me faire une idée pour l'analyse en elle-même

 

nb:peut-etre qqn connait un site avec les sources?

 

merci bcp!

 

 

:-(

Posté(e)

Il est censé faire quoi ton analyseur syntaxique, exactement ? produire un "pseudo-code" ? effectuer les opérations qu'on lui fournit ? (si c'est le cas, tu peux jeter un oeil aux sources de "bc")

Pourquoi avoir choisi de le faire en C ? C'était imposé ?

C'est dans quel cadre, que tu dois réaliser cet analyseur syntaxique ?

Posté(e)

l'analyseur doit reproduire une representation de l'expression analysée sous forme d'un arbre binaire

c t obligatoirement a faire en c

il fau d'une par:detecter toute erreur de syntaxe

dautre par:transcrire en expression syntaxique lexpression a partir de larbre

Posté(e)

j'ai arrêté les études y'a à peine 5 ans, et je ne comprends déjà plus rien à "représenter l'expression sous forme d'arbre binaire"...

Tu peux me filer un exemple, stp ?

On parle bien d'expressions mathématiques, là, non ??

Un arbre binaire, c'est bien un arbre dont les "noeuds" ont deux "branches", non ???

Par "expression syntaxique" tu entends quoi ? (je vois mal la différence entre "expression" et "expression syntaxique" et ce qu'implique de transformer l'une en l'autre...)

Posté(e) (modifié)

L'arbre binaire permet de définir les priorités des operateurs :

 

 

exemple avec du calcul :

2 * 3 + 6 ca donne  + -------* ------- 2
                                \           \_____3
                                 \____ 6


2 * (3 + 6) ca donne * ------ 2
                                 \_____ + ______ 3
                                              \_______ 6

 

Pour la représentation syntaxique à partir de l'arbre, c'est juste ressortir le script en sortie de l'arbre. CAD la meme chose qu'en entrée si l'analyseur est bon.

 

Automne

Modifié par automne
Posté(e)

c exactemen ça l'explication d'un arbre binaire

un sommet, des noeuds qui donnent les divisions en branches, ainsi que les feuilles...

ça permet un ordonnancement plus rapide qu'un simple tri

ds ce cas particulier l'arbre doi servir de pile pr stocker tous les caracteres de la chaine entrée pdt la verification syntaxique

en gros le prog doit verifier si le calcul entré est juste ou sil ya des fautes de syntaxes genre deux // (divisé ou autre signe dopérations ki se suivent)ou bien si on ouvre une parenthese mais kon la ferme pas, etc!

Posté(e)

ok, donc il faut juste vérifier que la syntaxe suit ces règles de "grammaire" :

 

opérateur ::= + - * /

opérande ::= une chaîne qui puisse être convertie en nombre

opérande ::= ( opérande )

opérande ::= opérande opérateur opérande

 

ça couvre toute la grammaire, ça, non ?

 

après, il s'agit d'empiler / dépiler correctement les membres de ton expression pour construire l'arbre (tu sais programmer en récursif ?)...

 

dans un premier temps on peut se contenter d'ignorer les priorités et traiter l'expression comme si on l'entrait sur une bête calculatrice "4 opérations". qu'est-ce que tu en penses ?

Posté(e)

en gros c ça...jai fini de programmer l'analyse mais c'est l'arbre qui me pose plus de probleme

a kel moment il fau le creer, ecrir dedans, et ou apler la fonction ki le parcour?

Posté(e)

bin, c'est de la programmation d'automates finis déterministes...

 

tu parcours ta chaine, tu dois d'abord rencontrer une ( ou un opérande

si tu as rencontré une ( tu relances récursivement avec le contenu des ()

si tu as rencontré un opérande tu dois ensuite avoir un opérateur

ensuite tu dois avoir une ( ou un opérande

si tu as rencontré une ( tu relances récursivement avec le contenu des ()

si tu as rencontré un opérande tu dois ensuite avoir une fin de chaine ou une )

 

si à la fin de tout ça tu n'as rencontré aucune erreur c'est que ton expression est correcte.

 

(franchement, une fois que tu auras implémenté ton automate, tu verras tout seul à quel moment empiler tes éléments dans ton arbre)

 

dépiler l'arbre pour en refaire une expression, c'est un autre sport et là j'ai ni le temps ni le courage ! ce week-end, peut-être ? ;-)

Posté(e)

c bon jai fini...

c t long et laborieux, mais c fini!

 

merci pr les conseils sur la façon deffectuer les actions!

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...