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 :

table de symboles


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 116
    Par défaut table de symboles
    bonsoir tt le monde
    alors voila j'essaie d'ecrire un analyseur lexical pr un petit compilateur(projet donnée en classe) tt marche bien(les differents tokens sont reconnus)le pb réside ds la table de symboles;en fait,ce qui arrive c ke tous les tokens sont insérés dans la meme place ds la table.
    kelkun pourrait jeter un coup d'oeil sur le .cpp joint?(ça va pas etre rigolo ds la mesure ou je ne suis pas trés ordonnée ds mé progs mais vous pourriez kan meme fér un ptit effort pour une pauvre nouvelle....hein?
    merci d'avance.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Par défaut


    Bienvenue à toi.

    Tu es sûr que c'est un fichier C++ ? (dans ce cas, tu es dans le mauvais forum).

    Réorganise mieux ton fichier, parce que :

    Ca va bien 2 sec, mais bon. Personne ne risque de regarder un code comme ça tellement c'est mal écrit.

    EDIT :
    char **tabsymbol=(char**)malloc(sizeof(char*));/*la table de symboles*/
    Tu as écrit ça hors de toute fonction, tu es au courant ? Tu n'as pas le droit.

    De plus, j'ai l'impression que la conception de ta table des symboles est mal faite...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void inserer(char *token,int position)
    Pourquoi se prendre la tête avec la position ? Effectivement il faudra le faire dans l'implémentation, mais pas dans la partie fournie au client (le .h)


    EDIT : Désolé pour certaine remarque, je me rappelais plus que tu faisais que l'analyseur lexical. Normalement, une table des symboles est utilisée surtout dans l'analyse sémantique.

  3. #3
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par jalam
    bonsoir tt le monde
    alors voila j'essaie d'ecrire un analyseur lexical pr un petit compilateur(projet donnée en classe) tt marche bien(les differents tokens sont reconnus)le pb réside ds la table de symboles;en fait,ce qui arrive c ke tous les tokens sont insérés dans la meme place ds la table.
    kelkun pourrait jeter un coup d'oeil sur le .cpp joint?(ça va pas etre rigolo ds la mesure ou je ne suis pas trés ordonnée ds mé progs mais vous pourriez kan meme fér un ptit effort pour une pauvre nouvelle....hein?
    merci d'avance.
    Première chose, l'extension cpp est utilisée pour du C++ et la plupart des compilateurs vont compiler par défaut ce fichier en C++ (enlève les cast sur les malloc et tu verras). Passer le fichier en .c

    Seconde chose, tu utilises des variables globales (bof bof), et ici ben tu en fais les frais.

    Tu as une varible globale de type int initialisée à 4. Lors de l'appel de la fonction inserer(), c'est toujours 4 (position global) qui est passé en argument effectif. Dans la fonction rechercher(), c'est le position global qui est pris et la recherche dans la table des symboles se fait toujours sur les 4 premiers tokens.

    Plus grave ensuite, pour revenir à la fonction inserer(), tu utilises le nom position pour l'argument formel, et ce nom masque celui de la variable globale, il prend le dessus.

    Vu que ta fonction rechercher() renvoie toujours 0 et que position (argument effectif) vaut toujours 4 au passage dans inserer(),
    la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static int indice=position;
    fait qu'on affecte 4 à indice à chaque fois. Ensuite, le topo, c'est incrémentation, on passe à 5 que l'on affecte à position (le local, bien évidemment), on écrit toujours à cette position, etc...

    A+

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 116
    Par défaut
    merci bcp pour les reponses,c'etait tres instructif...je me sens plus miniscule à present ...lol
    j'ai tjrs utilisé visual c++ pr mes progs et ça n'a jamais provoqué de pb jusqu'à present d'avoir un prog c en .cpp...mé ça devrait changer je suis entierement d'accord.
    en plus certaines manoeuvres ne sont pas très logiques je l'avoue notamment pr la variable statique indice et l'argument position...je devrais le rendre mardi donc......je panique!
    avec tt ce bazar...ce ki intrigue c ke la position n'est pas tjrs égale à 4.les tokens son insérés aux positions suivantes mé c comme si kan un autre token arrive,il est inseré dans ttes les positions depuis 5 jusqu'à la position ou il devrait normalement etre et comme ça il ecrase tt le monde!!!

  5. #5
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par jalam
    j'ai tjrs utilisé visual c++ pr mes progs et ça n'a jamais provoqué de pb jusqu'à present d'avoir un prog c en .cpp...mé ça devrait changer je suis entierement d'accord.
    Donc tu n'as jamais fait de C sous MSVC . Lorsqu'un new file est effectué au sein d'un project MSVC, il suffit de préciser l'extension .c dans le champ de texte du nom de fichier à créer pour ne pas qu'il prenne l'extension cpp et ainsi faire du C.

    Citation Envoyé par jalam
    en plus certaines manoeuvres ne sont pas très logiques je l'avoue notamment pr la variable statique indice et l'argument position...je devrais le rendre mardi donc......je panique!
    Oui seul le position global te suffit ici. Pas besoin de paramètre position pour la fonction inserer(), ni de une variable statique (indice) à l'intérieur.

    Citation Envoyé par jalam
    avec tt ce bazar...ce ki intrigue c ke la position n'est pas tjrs égale à 4.les tokens son insérés aux positions suivantes mé c comme si kan un autre token arrive,il est inseré dans ttes les positions depuis 5 jusqu'à la position ou il devrait normalement etre et comme ça il ecrase tt le monde!!!
    Je peux me tromper mais je n'aurais pas parié une seule seconde sur ce genre de comportement (je pensais à 5 affiché en permanence pour position dans la fonction inserer(), cf. mon point de vue dans mon message précédent). J'avoue que je coince là, peut être qu'il y a un comportement indéfini quelquepart.

    A+

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 116
    Par défaut
    Merci d'avoir essayé...apparemment c mon prog ki fait des miracles!Peut etre ke je devrais penser à l'exploiter sur une autre planètre parce que sur terre,il ne sert pa à grande chose..mé grace à vs j'ai appris bcp de choses au passage...donc je gagne tt de meme.
    à la prochaine

Discussions similaires

  1. Programme : Table des symboles
    Par Premium dans le forum C
    Réponses: 13
    Dernier message: 02/11/2017, 19h15
  2. Réponses: 0
    Dernier message: 08/03/2012, 16h41
  3. Intérêt d'une table des symboles dans un traducteur
    Par Chabanus dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 04/01/2011, 09h51
  4. Compilation / table des symboles
    Par j0o0 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 27/10/2009, 10h42
  5. [NASM] Table des symboles [32BIT] [*NIX]
    Par orfix dans le forum x86 32-bits / 64-bits
    Réponses: 1
    Dernier message: 25/02/2009, 23h13

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