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

Générateurs de compilateur Discussion :

Création d'un compilateur en C


Sujet :

Générateurs de compilateur

  1. #1
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut Création d'un compilateur en C
    Bonjour à tous,
    soit le programme suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <PROG>::=DEBPGM<DECL><CORPS>FINPGM 
    <CORPS>::=DEBINS<INSTS>FININS 
    <DECL>::=DEBDECL<DECVARS>FINDECL 
    <DECVARS>::=<DECVARS>,<DECV>|<DECV> 
    <DECV>::=<ID>:<TYPE> 
    <ID>::=#X<NBENTIER>|<ID>,#X<NBENTIER> 
     
     
    <NBENTIER>::=<CHIFFRE>|<CHIFFRE><NBENTIER> 
    <NBREEL>::=<NBENTIER>.<NBENTIER> 
    <TYPE>::=<TYPES>|<TYPEC> 
    <TYPES>::=entier|reel|caractere 
    <TYPEC>::=TAB|string 
    <TAB>::=tableau[<NBENTIER>]:<TYPES> 
     
     
    <INSTS>::=<INS>;<INS>|<INS>|<INS> 
    <INS>::<INS1>|FOR<EXPR1>TO<NBENTIER>DO DEBFOR<INS1>FINFOR 
    <INS1>::=<ID>:=<EXP>|<ID>:=<CHAINE|echo(<CHAINE>)|<ID>++ 
    <CHAINE>::="<CHARS>" 
    <CHARS>::=<CHARS>|<CHARS><CHAR> 
    <EXPR1>::=<ID>:=<NBENTIER> 
    <EXP>::=<EXP><OP><T>|<T> 
    <T>::=<ID>|<NBENTIER>|<NBREEL>|<ID>[<NBENTIER>] 
    <OP>::=PLUS|MOINS|FOIS|DIV 
    <CHAR>::=a|b|..|z|A|B|..|Z 
    <CHIFFRE>::=0|1|..|9
    1. Écrire un programme en C qui fait l'analyse lexicale de tout programme écrit selon la grammaire donnée précédemment ;
    2. Fournir un document de conception relatif à votre analyseur et preciser vos choix d'implementation( structures de données, algorithmes mis en oeuvres...).


    Je voudrais que quelqu'un m'aide à trouver une piste de solution pour résoudre ce problème car ça dépasse mes compétences.
    Merci.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Bonsoir,

    Est-ce que c'est un projet qui doit être réalisé à l'aide de Lex et Yacc (respectivement Flex et Bison chez GNU) ou, au contraire, pas du tout ?

  3. #3
    Membre régulier
    Inscrit en
    Mai 2010
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 7
    Par défaut
    Je n'ai aucune autre information concernant l'utilisation de Lex ou Yacc. Mais si cela peut aider je crois qu'on peut les utiliser.
    puisqu'il est mentionné dans une question ""Fournir un document de conception relatif à votre analyseur"". Donc un analyseur est requis.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 487
    Par défaut
    Citation Envoyé par neveah Voir le message
    Je n'ai aucune autre information concernant l'utilisation de Lex ou Yacc. Mais si cela peut aider je crois qu'on peut les utiliser.
    C'est-à-dire que Lex & Yacc sont les outils historiques mais néanmoins très utilisés dans les écoles, et servant justement à écrire des compilateurs (YACC = Yet Another Compiler Compiler). Et ils produisent justement du code en C à partir d'une grammaire que tu établis. On les utilise soit quand on étudie les langages formels, soit quand on cherche justement à parser un fichier quelconque sans avoir à réinventer la roue à chaque fois (en gros, on file les règles d'interprétation à Lex et à Yacc, qui nous pondent ensuite un compilo en C qui les respecte).

    Ça veut donc dire que dans ton cas, soit leur usage est obligatoire, soit il est interdit. Et comme tu ne les as apparemment pas vus en classe, je penche pour la deuxième option. Renseigne-toi auprès de ton prof'.

    puisqu'il est mentionné dans une question ""Fournir un document de conception relatif à votre analyseur"". Donc un analyseur est requis.
    Mouais, dit comme cela, ça laisse plutôt à penser que c'est à toi de concevoir et d'écrire un analyseur syntaxique, puis à en fournir les spécifications sur papier à ton prof'. Ce n'est pas forcément très difficile en soi, mais ça peut être vraiment très long si tu débutes en C.

    Hormis le côté programmation en lui-même, es-tu à l'aise avec les grandes lignes de ce genre de grammaire ? À commencer par la différence entre ses terminaux et ses non-terminaux ?

Discussions similaires

  1. [Flex/Bison] Création d'un compilateur
    Par mm2008 dans le forum Générateurs de compilateur
    Réponses: 0
    Dernier message: 22/12/2012, 20h43
  2. [Flex/Bison] Création d'un compilateur
    Par lion de feu dans le forum Générateurs de compilateur
    Réponses: 0
    Dernier message: 26/05/2012, 05h36
  3. Fonctionnement et création d'un compilateur C
    Par Abelkims dans le forum C
    Réponses: 6
    Dernier message: 23/07/2009, 13h50
  4. licence pour création d'un compilateur
    Par cdm1024 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 06/05/2009, 00h46

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