|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre confirmé
![]() étudiante ingénierie informatique Inscription : mars 2012 Messages : 294 ![]() |
salut
je suis entrain de développer un analyseur lexical en C: qui évalue une expression arithmétique et renvoie une liste chainée des identifiants, opérateur arithmètique et opérateur relationel, opérateur affectation. Pour le moment je suis entrain de travailler sur la fonction fonction RangerId() qui a accès au tampon où l’unité lexicale identificateur a été localisée, examine la table des symboles et si on trouve le lexème avec l’identificateur mot clé, RangerId() rend 0. Si on trouve le lexème comme variable du programme, RangerId() rend un pointeur vers une entrée dans la table des symboles. Si on ne trouve pas le lexème dans la table des symboles, il y est placé en tant que variable et un pointeur vers cette nouvelle entrée est retourné. je n'arrive pas a faire l'étape de recherche dans la table de symbole avec les condition si trouver sinon, voilà le code, pouvez vous m'aider? Merci Code :
__________________
"Scientists dream about doing great things. Engineers do them.” La réussite après tant de travail est un sentiment à vivre Si ton message est résolu, il y a un bouton qui est fait pour ça : ![]() Il se trouve tout en bas de la conversation ! N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant
|
||
|
|
00
|
|
|
#2 | ||
![]() ![]() ![]() |
Code :
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||
|
|
00
|
|
|
#3 |
![]() ![]() Ingénieur systèmes embarqués Inscription : juin 2009 Messages : 1 821 ![]() |
Mieux vaut ne pas mettre d'accents dans le code !!
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^ Pour vos problèmes d'embarqué, utilisez le forum dédié ! |
|
20
|
|
|
#4 |
|
Membre confirmé
![]() étudiante ingénierie informatique Inscription : mars 2012 Messages : 294 ![]() |
J'ai pensé à les mettre dans un tableau dynamique, c'est faisable? ou y'a t'il un moyen plus adapté?
merci
__________________
"Scientists dream about doing great things. Engineers do them.” La réussite après tant de travail est un sentiment à vivre Si ton message est résolu, il y a un bouton qui est fait pour ça : ![]() Il se trouve tout en bas de la conversation ! N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant
|
|
|
00
|
|
|
#5 |
|
Expert Confirmé
![]() ![]() Gérald Conducteur de train Inscription : février 2008 Messages : 1 368 ![]() |
Il me semble que l'idéal serait de les placer dans un tableau associatif, ce qui se traduit en C par une table de hashage.
Ainsi tu disposes d'un tableau à taille variable (ta question de départ), avec en plus un accès rapide aux données.
__________________
Système d'exploitation : Debian Amd64 Testing / Slackware 13.37 32 bits Site perso : http://gerald3d.developpez.com (article Glade3 et Gtk+) Site perso : http://linechec.sourceforge.net (jeu d'echec) v0.4-1 Site perso : http://m3dlib.tuxfamily.org/ (moteur 3d. Rendu dans un GtkDrawingArea avec utilisation de Cairo.) v0.26 contact jabber : gerald3d@jabber.tuxfamily.org |
|
|
20
|
|
|
#6 |
|
Membre habitué
![]() amateur Inscription : avril 2012 Messages : 145 ![]() |
Je pense (après un coup d'oeil très rapide) que tu pourrais dans un premier temps mieux isoler les différentes tâches de ton code. Tu as besoin d'une table des symboles qui fasse juste bien son boulot (1) de stocker l'ID du symbole (et sûrement sa donnée courante) (2) de te dire si un symbole existe déjà (3) de retourner la donnée s'il existe.
Si tu n'es pas familier des tables de hachage, dans un premier temps fais une liste associative. PS: au cas où ça te branche, j'ai en stock du code C pour un set ou une map spécialisé pour des éléments / clés de type string (avec une fonction de hachage murmur3hash, ce qui se fait de mieux). Denis |
|
|
20
|
|
|
#7 |
|
Membre confirmé
![]() étudiante ingénierie informatique Inscription : mars 2012 Messages : 294 ![]() |
j'ai utilisé une liste chaînée comme table de symboles, ça se fais pas?
__________________
"Scientists dream about doing great things. Engineers do them.” La réussite après tant de travail est un sentiment à vivre Si ton message est résolu, il y a un bouton qui est fait pour ça : ![]() Il se trouve tout en bas de la conversation ! N'oublie pas que si ce message t'as aidé, tu peux voter pour lui en utilisant
|
|
|
00
|
|
|
#8 | |
|
Membre habitué
![]() amateur Inscription : avril 2012 Messages : 145 ![]() |
Citation:
Au-delà d'une certaine taille, qui dépend de ton appli, de son usage réel, et de son implantation, tu peux avoir des problèmes d'efficacité car pour trouver un symbole tu n'as pas d'autre choix que traverser la liste en comparant ID par ID. Mais si ça suffit pour ton appli lors de tests avec des exemples réalistes (surtout le nombre de symboles != par table), alors ne t'embête pas, d'autant que la simplicité d'une liste est un grand gain pour la maintenance, par rapport à des structures plus sophistiquées pour gagner de la vitesse (tables de hachage, arbres de recherche). Bon, c'est juste mon avis. Denis |
|
|
|
10
|
Copyright © 2000-2013 - www.developpez.com