[C++] Création d'une machine virtuel

Création d'une machine virtuel [C++] - C++ - Programmation

Marsh Posté le 27-04-2002 à 07:37:43    

Je suis entrain de préparer un projet en C++ que je souhaite vraiment terminer. Donc je me prépare d'avance en écrivant un document qui contient tout les informations du projet c-à-d que je décrit comment je veux tel chose et tel autre chose. Comme ca je ne serai pas perdu entre deux fonction sans savoir quoi faire :D  
 
Donc mon projet se résume en une classe qui permet de lire un fichier script et d?exécuter ce qui si trouve. Le langage sera très simple, à la base du basic mais avec des élément d'autres langages. Une bout de code pourait avoir l'air de ca:

Code :
  1. Dim VariableXX, VariableYY
  2. VariableXX = 2
  3. VariableYY = "Je sais compter jusqu'a " + VariableXX
  4. Afficher (VariableYY)


Comme vous avez pu le constater, les variable n'on pas de type définit, c'est pas bien mais c'est simple  :sol:  
 
En gros, la classe principale contiendra une liste (de taille variable) de variables et des pointeurs de fonction qui poinent sur des fonction "publier" de mon programe.
 
Si je poste un message ici c'est bien sur parce que j'ai besoin de votre aide  ;) Je me demandais comment je pouvais stoquer la valeur des variables. J'avais pensé à une struct du style:

Code :
  1. struct MV_Variable
  2. {
  3.   char *nom;
  4.   char *valeur;
  5. };


 
J'ai pensé à utiliser un char* et de stocker la valeur sous forme d'une chaîne et de la transformé en entier/float etc. lors des opération mathématique.
 
Croyez vous que c'est une bonne façon ou il existe de meilleur moyen? et lorsque je voudrai accéder à une variable il faudra que je vérifie toutes les variables par leur noms, ce qui me semble assez lent :??: Existe t-il un moyen plus rapide pour retrouver la valeur sans avoir a cherché parmi toute les autre variables?
 
Merci à l'avance!!

 

[jfdsdjhfuetppo]--Message édité par Ventilo le 27-04-2002 à 07:38:05--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 27-04-2002 à 07:37:43   

Reply

Marsh Posté le 27-04-2002 à 11:07:16    

>> VariableYY = "Je sais compter jusqu'a " + VariableXX  
 
la concaténation de strings n'est pas commutative, donc utiliser '+' = :non: ... et c'est une source (chiante) de problèmes (très chiants) en javascript, quand tu veux additionner des valeurs qui proviennent d'une form : par ex faire form.var1 (qui contient 1) + form.var2 (qui contient 1) te donnera 11 (il 'additionne' en fait les deux strings). php utilise un opérateur distinct '.', donc pas de problème.
 
>> struct MV_Variable  
 
en général, c'est plutôt une structure 'variant', qui contient le type de la variable et une union de toutes les valeurs qu'elle peut prendre (entier, flottant, string, etc.). tu peux regarder les sources de php ou les headers de com ( http://216.239.51.100/search?q=cac [...] iant&hl=en )  
 
>> il faudra que je vérifie toutes les variables par leur noms, ce qui me semble assez lent  
 
pour ça, tu utilises une hashtable.  
 
je ressors la page de crenshaw http://compilers.iecc.com/crenshaw/ qui a le mérite d'être claire et simple.

Reply

Marsh Posté le 27-04-2002 à 17:08:04    

:jap: Merci beaucoup  :hello:
 
Je vais regarder ca!!

 

[jfdsdjhfuetppo]--Message édité par Ventilo le 27-04-2002 à 17:08:34--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 27-04-2002 à 19:43:50    

J'ai fait une recherche sur les hashtable, et je suis un peu confu à ce sujet...
 
J'ai découvert que la STL offrait un container map et que sur certain site il était considéré comme une hashtable et sure d'autre rien n'est dit à ce sujet  :??:  :??:  
 
map est t'il oui ou non basé sur une hashtable  :??:

Reply

Marsh Posté le 27-04-2002 à 20:29:17    

Ventilo a écrit a écrit :

 
map est t'il oui ou non basé sur une hashtable  :??:  




 
Non. std::map utilise l'operateur "inferieur" sur les clefs de la map

Reply

Marsh Posté le 27-04-2002 à 20:31:07    

[citation]
Donc mon projet se résume en une classe qui permet de lire un fichier script et d?exécuter ce qui si trouve. Le langage sera très simple, à la base du basic mais avec des élément d'autres langages. Une bout de code pourait avoir l'air de ca:
[/citation]
Je suis curieux de savoir si tu vas utiliser un truc genre lex/flex ou yacc/bison pour faire de l'analyse syntaxique.

Reply

Marsh Posté le 27-04-2002 à 20:38:49    

une petit definition de map :
 
Definition: A map is a data structure that stores pairs of keys and values. A value may be inserted or retrieved based on its key. In C++, map is a container class in the Standard Template Library, STL.  
 
Also Known As: associative array, hash


---------------
L'homme sage apprend de ses erreurs.  
Reply

Marsh Posté le 27-04-2002 à 21:25:43    

En fait, j'en suis encore au stade de pré-conception. Je ne sais pas encore comment je vais faire fonctioner le tout. J'ai regardé un peu ce que pouvait faire les programes du style lex,yacc/flex/bison etc.
 
Je vais expériementer un peu puis je me déciderai après.

Reply

Marsh Posté le 27-04-2002 à 21:30:12    

kris a écrit a écrit :

 
Also Known As: associative array, hash  




 
Les clefs de la map sont comparees en utilisant par defaut en utilisant "less<Key>" (doc de la STL SGI), bref "operator <".
Si on veut, on peut definir "operator <" tel qu'il utilise une valeur de hachage, mais je ne vois pas de "hash table" la dedans...
 
D'ailleurs, Stroustrup propose l'ecriture d'une classe "hash_map" en plus de la classe "map" dans son bouquin...

Reply

Marsh Posté le 28-04-2002 à 11:32:34    

je suis d accord en ce qui concerne la map.
il est preferable, je pense, de se faire une petite class hash_map.
 
Sinon pour le scanner et le parser je te conseille le couple flex/bison
 
en plus cherches sur le net la version 1.49a de bison car elle genere du code C++ (sympa!) Bon ok, c une beta mais elle marche bien!

 

[jfdsdjhfuetppo]--Message édité par kris le 28-04-2002 à 11:33:26--[/jfdsdjhfuetppo]


---------------
L'homme sage apprend de ses erreurs.  
Reply

Marsh Posté le 28-04-2002 à 11:32:34   

Reply

Marsh Posté le 28-04-2002 à 18:48:15    

Je vien de décourvrir sur le site de SGI qu'il avait une extension de la STL qui contien justement une classe hash_map  :)  
 
Reste plus qu'a l'aprivoiser!!
 
Par contre, je crois que j'y suis aller un peu fort avec le terme "Machine virtuel". En fait c'est vraiment plus du "script" que je veux... du style pas compilé... Je le parse et je l'execute! L'interprétation de code compilé me semble encore un peu trop compliqué...

Reply

Marsh Posté le 29-04-2002 à 21:16:05    

cool, je ne savais pas pour hash_map!
 
sinon n'ai pas peur pour la machine virtuel, c pas aussi dur que tu penses!
 
@+


---------------
L'homme sage apprend de ses erreurs.  
Reply

Marsh Posté le 30-04-2002 à 08:53:26    

Et, une question:
ça va servir à quoi ton truc ? parce que, je vois pas l'intéret de créer un "sous-langage" en C...

Reply

Marsh Posté le 20-05-2002 à 07:20:28    

el_gringo a écrit a écrit :

Et, une question:
ça va servir à quoi ton truc ? parce que, je vois pas l'intéret de créer un "sous-langage" en C...  




 
Ben.... le défi  ;)

Reply

Marsh Posté le 21-05-2002 à 00:52:40    

Ben oui le defi, c quand meme tres instructif ce genre de trucs et ca permet de voir la galere qu'il y a a faire un compilo...
J'ai essayer de faire un truc de ce genre l'an dernier et le conseil que je peux donner c d'un part avoir une grammaire tres precise du langage(pour utiliser flex et bison correctement) et d'autre part de s'armer de courage(ca peut s'averer galere).
Bonne chance...

Reply

Marsh Posté le 21-05-2002 à 10:35:51    

Ventilo a écrit a écrit :

 
 
Ben.... le défi  ;)  




 
Ouais, ms bon, tant qu'a se lancer un défit, autant que le trucs que tu fasse puisse avoir une utilité. Parce que, créer un truc inutile, c pas très gratifiant j'trouve !
Et créer un langage en utilisant le C, y a + utile.

Reply

Marsh Posté le 21-05-2002 à 22:21:45    

el_gringo a écrit a écrit :

Et créer un langage en utilisant le C, y a + utile.


j'ai énormément appris en codant une petite combinaison compilo + vm. et ça m'a "décoincé" de ma "peur" d'évaluation d'expression, chose que je considérais complexe et qui s'est révélée être très simple. deuxième chose surprenante, ça ne m'avait pas pris tant de temps que ça (c'était très basique mais je m'imagineais des montagnes).
 
dire "y'a plus utile", c'est justement ça qui n'est pas très utile.

 

[jfdsdjhfuetppo]--Message édité par youdontcare le 21-05-2002 à 22:22:24--[/jfdsdjhfuetppo]

Reply

Marsh Posté le 22-05-2002 à 08:56:28    

youdontcare a écrit a écrit :

j'ai énormément appris en codant une petite combinaison compilo + vm. et ça m'a "décoincé" de ma "peur" d'évaluation d'expression, chose que je considérais complexe et qui s'est révélée être très simple. deuxième chose surprenante, ça ne m'avait pas pris tant de temps que ça (c'était très basique mais je m'imagineais des montagnes).
 
dire "y'a plus utile", c'est justement ça qui n'est pas très utile.  




 
Bah si, c utile que je donne mon avis. Tout avis est bon à prendre. Sauf pour les gens bornés bien sur.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed