IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Définir une grammaire non récursive reconnaissant les constantes numériques dans C/C++


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut Définir une grammaire non récursive reconnaissant les constantes numériques dans C/C++
    Bonjour,
    Dans le cadre d'un exercice en "language et compilation" je dois définir une grammaire (non récursive) qui doit reconnaître les constantes numériques dans le langage C/C++. Les symboles terminaux sont les signes ‘+’ et ‘-‘, la virgule décimale ‘,’ et les chiffres de ‘0’ à ‘9’.

    De la forme, par exemple :
    S=aB|bA
    A=a|aS|bAA
    B=b|bS|aBB

    Mais avec les conditions ci-dessus.
    Quelqu'un pourrait-il me venir en aide?
    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    Nous savons ce qu'est une grammaire. Peux-tu donner celle qui correspond à l'énoncé ?

    As-tu le droit d'utiliser des outils de type lex / yacc ?

    Qu'as-tu essayé jusqu'à présent ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 13
    Par défaut
    Nom : Capture d’écran 2017-04-23 à 21.54.48.png
Affichages : 503
Taille : 536,7 Ko

    Je dois faire la G10.

  4. #4
    Expert confirmé
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 540
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 540
    Par défaut
    salut l'exercice demandé a tout l'air d'un parser d'expression ( analyseur syntaxique)
    Une piste parmi d'autres étudier le shunting-yard algorithm

    Ou alors plus sophistiqué utiliser un arbre binaire, à chaque noeud tu testes si le caractère analysé c'est + ,- ,un chiffre...

  5. #5
    Membre Expert
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Par défaut
    A priori on ne demande pas d'analyser des expressions complexes mais simplement des constantes numériques.

    @ l'OP : l'énoncé n'est pas clair, doit-on analyser des constantes telles qu'elles pourraient apparaître au sein d'un fichier C ou C++, écrire un programme en C ou C++ qui réalise l'analyse syntaxique d'une entrée respectant cette grammaire, ou les deux ?

    Je repose également ma question :

    Citation Envoyé par Matt_Houston Voir le message
    Qu'as-tu essayé jusqu'à présent ?

  6. #6
    Membre Expert
    Avatar de Pyramidev
    Homme Profil pro
    Tech Lead
    Inscrit en
    Avril 2016
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Tech Lead

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 515
    Par défaut
    De ce que je comprends de la consigne, il n'y a rien à programmer. ll faut juste écrire une grammaire.

    Voici les syntaxes des constantes numériques en C et en C++ :

    En C et en C++, le séparateur décimal n'est pas la virgule, mais le point. Mais, visiblement, le prof de lagranget veut une virgule à la place.
    + et - font partie des symboles terminaux, donc il faut aussi prendre en compte les opérateurs unaires + et - dans la grammaire.
    Les seuls symboles terminaux autorisés sont +, -, la virgule et les chiffres de 1 à 9, donc on oublie les constantes binaires et hexadécimales, les exposants, les suffixes qui permettent à un entier d'être long ou non signé, etc.

    Les seules possibilités qui restent sont donc :
    Un +, un - ou rien du tout suivi de :
    • une séquence de chiffres
    • une séquence de chiffres puis une virgule
    • une séquence optionnelle de chiffres puis une virgule puis une séquence de chiffres

    Alors, si on a compris comment marche une grammaire, transformer les règles ci-dessus en grammaire devrait être simple.

Discussions similaires

  1. [perl6] Comment définir des mots reservés dans une grammaire Perl6 ?
    Par jeepc dans le forum Langage
    Réponses: 13
    Dernier message: 10/03/2017, 08h09
  2. Définir une chaine (non connue) dans une variable
    Par synx91 dans le forum Langage
    Réponses: 2
    Dernier message: 26/09/2012, 16h00
  3. Définir la valeur d'une checkbox non cochée
    Par frakosun dans le forum Langage
    Réponses: 3
    Dernier message: 06/02/2008, 13h52
  4. Réponses: 1
    Dernier message: 26/09/2007, 17h16
  5. Définir une appli JEE avec JB7 Entreprise
    Par polo54 dans le forum JBuilder
    Réponses: 4
    Dernier message: 10/06/2003, 11h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo