INTERPRETEUR DE SCRIPT (1ERE ÉTAPE): L'EVALUATION D'EXPRESSION

coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 - 17 nov. 2004 à 14:14
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011 - 29 nov. 2004 à 08:55
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/27621-interpreteur-de-script-1ere-etape-l-evaluation-d-expression

magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
29 nov. 2004 à 08:55
cf les liens cités.
Si c'est pour faire au final exactement la meme chose,
pourquoi payer un autre produit alors qu'on en a deja un (là, je fais l'avocat du diable, mais, il faut bien que qqn s'y colle.)
Ce un permet déjà tout même s'il n'est pas tjs élégant.

Allez donc expliquez a des décideurs non-informaticiens ces avantages....

:p
B
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
27 nov. 2004 à 00:56
"Les avantages a passer à une version ultérieure sont uniquement pour le développeur."

je veux pas dire, mais pour un outil de développement, des avantages développeurs ça a son intérêt quoi :D
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
26 nov. 2004 à 09:01
parfaitement exact.

VC6 date de 98, ça date en effet, mais c'est un produit fini permettant la production de solution complètes et fonctionnelles.

Les avantages a passer à une version ultérieure sont uniquement pour le développeur.

Voyez cette page et éventuellement, rajoutez y du grain à moudre...
http://www.cppfrance.com/forum.v2.aspx?ID=276360
+++
Merci
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 nov. 2004 à 17:25
du fait de l'age de vc6, ce bug est mineur (c'est surtout les templates et la stl qui sont genant)

je me rappele encore de certains codes bénin, utilisant la stl, qui ne compilaient pas sous vc6
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
25 nov. 2004 à 16:54
voui voui, je sais ça. je l'ai appris à me dépend en voulant intégrer une classe écrite par Wett sous VC6 dans un projet Borland C++ Builder, il a fallu tripatouiller ...
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
25 nov. 2004 à 16:32
seulement avec vc++6 syncppfrance

sinon

for(int a=0;a<2;a++);

est strictement équivalent à

{
int a;
for( a=0;a<2;a++);
}

...une variable auto à la porté du bloc dans lequel elle est déclarée...
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
25 nov. 2004 à 15:03
c normal, le int dans vc++ est declaré en dhosr du bloc for() du coup ca revient a faire:
int i;
int i; // variable deja existante

cest rigolo je viens juste de repondre au meme sujet a un post sur les newsgroup!!!!!
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
25 nov. 2004 à 14:52
exemple de code C++ compilant avec VC6

{
if(int a=toto){...}
a=3;
}

exemple de code C++ ne compilant pas avec VC6

{
for(int a=0;a<2;a++){...}
for(int a=0;a<2;a++){...}
}


pr le reste, et bien un coup de google
sur vc6 et stl et tu trouveras

++
sinon, tu peux aussi parcourir les historiques des msg de chacuns...

bonne navigation.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
24 nov. 2004 à 19:00
Kirua > c'est simple, vc6 a du mal avec les templates, alors tu voit ce que ca peux donner pour les model de la stl

et le code est pas terrible, pas optimisé (sous vc6, facile de faire mieux sois meme)

j'ai plus vc6, mais j'aimerais bien pouvoir donner des exemples (autre que le bug de la porté des variables/bloc)

sur google ou msdn, ca doit se trouver
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
24 nov. 2004 à 16:46
"qu'elles n'étaient pas tout à fait compatible avec VC6"

tu peux me faire un bref résumé des conclusions de cette discussion? ça m'étonne bcp. d'autre part, on sait tous que VC6 et les standars... aheum!
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
24 nov. 2004 à 15:08
la stl est très bien c'est sur, mais nous avons déjà débatu au travers de ces pages qu'elles n'étaient pas tout à fait compatible avec VC6

cf discutions du forum au cours de l'été.

Magicalement.
C'est en développant qu'on devient développeur.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
24 nov. 2004 à 14:49
"pour des raisons de portabilité totales, j'utilise tjs mes libs perso;"

La std/stl (la stl n'est qu'un sous groupe de la std sauf erreur) est non seulement portable "dans l'absolu" (portée pour quasiment tous les compilos existant), mais en plus optimisée pour chacun de ces compilos, séparément. difficile de faire mieux, sans compter qu'il ne faut pas tripatouiller avec des #ifdef GCC #include "mes_listes_chaines_gcc.h" #elif etc etc etc... tout est fait pour toi.

ceci dit, c'est courageux d'avoir tout reprogrammé!
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
24 nov. 2004 à 09:28
pour des raisons de portabilité totales, j'utilise tjs mes libs perso; en plus les ayant conçues, une modif mineur est tjs faisable sans impacter ts les prog développés préalablement

mais pour une meilleur réutilisation
commentaires à mort et une norme/ convention de programmation ainsi que des méthodes

je peux pour cela vous conseiller de faire votre sauce entre UML et MERISE pour la méthode et pour la convention, et bien voyez celle développée pour MétaProg que j'ai déjà mis en ligne dans ces pages.

ce n'est pas un coup de pub mais juste quelques conseils que l'on pourrais qualifier de bonnes pistes pour un développement libre et de grande envergure.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
23 nov. 2004 à 21:28
non mais qand je parle de opengl ou de sdl, jaurais tres bien pu parler de autre chose, c a titre d'exemple. c'est pas au mot a mot.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 21:13
ya beaucoup de hp qqsoit la platforme, (les interfaces des classes, les algos...)

sinon c'est vrai que c'est tres difficile à lire
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 nov. 2004 à 21:08
cracks ou pas, je trouve leur style de programmation déplorable ^_^ t'as déjà regardé les codes sources de la STL version GCC? c'est horrible mdr! et puis pour optimiser le tout il font un usage minimal des fonctions, du coup c'est plein de répétitions etc... vaut mieux qu'elles soient là que dans mon code, mais c'est mooooche :D je ne doute pas de l'efficacité par contre.

c'est pas forcément HP, ça dépend du port que tu considères. chaque compilo a sa distrib je pense, même si ça devrait pas être forcé a priori, j'en sais trop rien.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 21:05
Kirua > la stl est codé par des cracks du langage (c'est hp il me semble ?), c'est fais pour ne pas etre recodé
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 21:00
opengl tu n'as pas trop le choix, si tu veux t'en passer faudrais que tu code toi meme un drivers pour ta carte graphique (si tu veux exploiter le matos)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 nov. 2004 à 20:59
je ne sais pas pour toi, mais je suis amateur, j'ai jamais eu de cours de prog et j'ai rarement pu lire des livres sur la programmation. je ne peux vrmnt pas prétendre faire mieux que la std/stl ^^ ceci dit, je t'accorde volontiers qu'il faut bien à un moment partir sur ses bases à soi, et c'est ce qu'on fait assez naturellement je crois donc ça pose pas de souci.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
23 nov. 2004 à 20:56
reste aussi le fait que si tout le monde utilise que ce qui existe sans utiliser ce que lui a fait, on avancera jamais!!!! parcque dans c cas dans 100ans on auras toujours les vieilleries de lepoque, parceque tout le monde utilisra qe ce que propose les autres. je veux bien utiliset sdl, opengl, etc, mais ya defois ou je prefere dependre de moi meme. fo le juste milieu sans chercher les extremes.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 nov. 2004 à 20:41
En fait, pour illustrer ça non plus à l'échelle des outils mais à l'échelle de projets entiers, combien de Pong, combien de Démineur, combien de Mario, Arkanoïd, Tétris... on n'arrête pas dans notre apprentissage de copier des projets pour se rendre compte des difficultés, aborder le problème plus essentiellement. Bien sûr, ça ne suffit pas en soi, ça doit être une passerelle vers une création plus personnelle, inovante, mais ça reste un passage courant, comme si ces jeux constituaient des exercices de cours :)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 20:35
je suis d'accord, on peut coder qqchose qui existe deja, pour le plaisir de comprendre

sinon vaut mieux eviter de reinventer la roue, c'est antiproductif
(sauf exceptions, contrainte, lenteur, ou parce que c'est mal foutu...)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
23 nov. 2004 à 20:26
c'est pas pareil. utiliser la STL par exemple ce n'est pas de la "triche". Si tu t'en donnais le temps tu pourrais très bien coder toi-même des listes chaînées, aglos de tris etc (c'est très intéressant, je dis pas, ça me passionne d'ailleurs les différents algos de tri), mais une fois que tu t'en sais capable, rien ne t'oblige de te contraindre à ton implémentation (pour autant que tu en aies assemblée une). Pour la suite, utiliser les conteneurs de la STL permet d'obtenir des programmes vrmnt optimisés et très facile à lire pour d'autres codeurs, de même qu'ils seront plus portables: c'est tout bénef ;) Pour autant, tu n'auras pas réellement sauté une étape de ton apprentissage.

par contre, substituer une partie de ton code par les codes générés par Flex/Bison, ça c'est "tricher", dans le sens que ton programme sert justement à tester ta capacité à faire si pas pareil, qq ch d'apparenté.

Fin bon, c'est mon point de vue hein ^^
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
23 nov. 2004 à 20:15
faut relativiser, aussi

pas exemple se limiter à l'emploi du langage et de sa bibliotheque standard et des apis de bas niveau du systeme, mais meme la ca peut etre du sucide

sinon tu pourrais toujours recoder ton os et ton langage, la tu seras sur d'avoir tout fais
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
23 nov. 2004 à 20:03
d'accord avec vous nono et syncppfrance
rien ne vaut le perso de chez perso ;)
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 nov. 2004 à 17:45
>suis d'accord avec toi syncppfrance, rien de tel que de tout faire soi même :) contrôle absolu et compréhension maximale! même si les perfs st forcément moindres, mais je suis prêt à faire le sacrifice perso...

tout à fait pour, c'est le mieux !!!!

sauf bien sur lors de développement commandés et en temps ultra limité (les contraintes de la vie active...)

mais c'est sur quje le mieux est de tout faire, tout gérer au max en utilisant parfois les fonctionnalités automatiques que l'on comptera évidemment reprendre ultérieurement.

Flex/Bison et Lex/Yacc font exactement la mm chose

Flex/Bison est le couple du monde libre
les sources C/C++ en sont disponnibles...
sous licence GNU

@+
Nono.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
22 nov. 2004 à 16:25
C'est quoi la différence entre Flex/Bison et Lex/Yacc ? (autre que les liens de parentés animaux entre le yacc et le bison :p)

suis d'accord avec toi syncppfrance, rien de tel que de tout faire soi même :) contrôle absolu et compréhension maximale! même si les perfs st forcément moindres, mais je suis prêt à faire le sacrifice perso...
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
22 nov. 2004 à 12:25
ce qui minterresse, cest de le faire moi, sinon c pas drole.
magic_Nono Messages postés 1878 Date d'inscription jeudi 16 octobre 2003 Statut Membre Dernière intervention 16 mars 2011
22 nov. 2004 à 11:59
Très bon prj

Bon courage...

Question : pourquoi ne pas l'avoir fait directement avec le couple Lex/Yacc?
ça aurait été certainement plus simple et peut-etre mm encore plus rapide

++
Magicalement
Nono.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
19 nov. 2004 à 19:33
pas vraiment, et oui en même temps.
je dirais que map est plus apparenté à une table de hashage, mais n'en est peut-être pas une, j'avoue ne pas savoir. càd que map est de tte façon un conteneur: il contient une série de paires clef - données associées, et permet d'accéder aux données via les clefs, qui peuvent être de tout type, ce qui est pratique (tableaux associatifs, comme en PHP).

d'une certaine manière, on pourrait considérer que chaque élément d'une 'map' est une 'pair'. je n'en sais pas plus sur la STL, donc je ne peux rien affirmer.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
19 nov. 2004 à 19:28
comme std::map?
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
19 nov. 2004 à 19:17
http://gcc.gnu.org/onlinedocs/libstdc++/latest-doxygen/structstd_1_1pair.html

voilà pr la partie de la stl nommée pair.

évidemment, tu peux aussi associer un entier et une chaîne etc... ce qui est encore plus parlant (associer un ID et un nom, un pointeur vers des données, ...)

je pense que ça ce serait tt de même assez chaud à implémenter ds ton langage de script... me paraît pas facile :)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
19 nov. 2004 à 19:14
ce que j'appelle couple de chaîne correspond avec la std C++ à ceci: pair<string>; ou bien plus classiquement en prog structurelle:

struct Couple
{
string str1, str2;
};

c'est souvent utile pour associer un nom et une adresse par exemple, des choses comme ça. l'avantage de la version templatisée pair<type> est que tu peux associer tout ce que tu veux (vecteurs, entiers, ...)
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
19 nov. 2004 à 11:33
je iens a ajouter que pour les tableaux ca devrait passer tranquillement, fut un temps ou javais deja travailler sur ce genre de script avec des tableaux, donc jai encore (a peu pres) la solution en tete.

j'e mettrai pour la 2eme partie:
-les if et les bloc
-les tableaux
- ^ puissances
- les petites modifs de inline
- la gestion des vecteurs 3d et 2d (a base de float)
- peut etre des matrices ( je verrai )
- on verra pour la suite, c deja un bon debut

c'est quoi que tu appeles les couples de chaines de caracteres? ( parceque jai oublié de dire mais on peut concatener 2 chaines ensemble par exemple comme ceci:

myvar = "ggg" + "iiii" + string(var4);
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
19 nov. 2004 à 00:30
oué bein pour tout cest trucs a ajouter, chaque chose en son temps.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
19 nov. 2004 à 00:27
"pour ce qui est de la pré-compilation, je te conseille ce qu'on appelle la semi-compilation (à la manière du bytecode java). l'idée, c'est de transformer les mots clefs en des signatures plus courtes, pour pouvoir effectuer le parsage du script (identification et séparation des lexèmes = éléments constitutifs du script) plus rapidemment, étant donné la toute relative rapidité du traitement des chaînes de caractères :p"

oué c'est ce que je volais dire par precompilation.
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 nov. 2004 à 22:54
"comme par exemple la gestion des vecteur 3d, ou autre."

c'est vrai que les langages structurels/OO étant difficiles à implémenter, ce serait un bon compromis de créer directement comme types intégrés les objets les plus courants comme les vecteurs 2/3 D, les couples de chaînes de caractères, ...
Il faudrait idéalement aussi prévoir des listes chaînes, voire même des tables de hashage si tu vois grand, accompagnées d'algos de tri/recherche etc... mon langage n'implémente pas les tableaux, et c'est un GROS handicape! j'ai dû en simuler un avec des astuces dignes des plus moches des workarounds, je suis pas fier de moi :/ comme tu commences encore ton langage, essaye de vrmnt prévoir les tableaux / listes chaînées natives, tu t'en féliciteras plus tard ;)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 nov. 2004 à 22:49
pour ceux que ça intéresse, je me mets à la fastidieuse lecture de ceci: http://www.peroxide.dk/download/tutorials/pxdscript/chapter1.html.
première fois que je trouve un doc qui a l'air sérieux sur le sujet, gogogo :)

pour ce qui est de la pré-compilation, je te conseille ce qu'on appelle la semi-compilation (à la manière du bytecode java). l'idée, c'est de transformer les mots clefs en des signatures plus courtes, pour pouvoir effectuer le parsage du script (identification et séparation des lexèmes = éléments constitutifs du script) plus rapidemment, étant donné la toute relative rapidité du traitement des chaînes de caractères :p
il faut tt de même retenir que ça a un sérieux désavantage: tu es obligé de re"compiler" tes scripts après chaque modif avt de pvr les tester, ce qui est vite pelant quand tu dois tester ton jeu...
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
18 nov. 2004 à 22:48
et aussi lajout de variable, mais je pense que pour une meilleure facilité, il fadraut adapter et rajouter les types propres a son programme avant la compilation (directement en dur) comme par exemple la gestion des vecteur 3d, ou autre.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
18 nov. 2004 à 22:44
kirua, je penserais a faire les mises a jour pour la 2eme partie : les blocs et les if, la 3eme sera surement les boucles, et enfin les procedures et ladaptation surement en dll. ensuite viendra peut etre une suite comme une precompilation de code pour aller plus vite a la lecture (une sorte de binaire mais avec du code assembleur simplifiié, soit x86, soit interpreté mais ce sera autre chose, vu qu la pour linstant on parle d'interpreteur de script et non de compilateur)

, pour linstant, il ne gere pas les procedures ou autre, il ne gere que les expressions comme tu as vu.
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 nov. 2004 à 20:40
entierement d'accord, je parlais de pomper des modules, pas de comprendre le code
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 nov. 2004 à 20:35
"ben pompe dans le code d'un compilo gnu"

t'as déjà vu ce que c'est? j'avais dl le code source de GCC en son temps, c'est de la folie comme code :/ vraiment, je pense que t'as plutôt intérêt à essayer de mettre la main sur des doc qui parlent de la façon dont il faut designer les langages de scripts. j'en avais pas trouvé à l'époque ce qui explique les fautes de conception que j'ai faites, mais si tu trouves de bons docs, tu devrais pvr coder tt ça toi-même sans pomper.

commence qd même par écrire un bon intérpréteur d'expressions arithmétiques/logiques. si tu veux je peux te passer mon code, il fait aussi le calcul des dérivées, gère les constantes, les variables, les fonctions multi-paramétriques, tout plein d'opéros. le tout est récursif et encapsulé dans une classe. si ça t'intéresse: kirua AT coder-studio DOT com
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
18 nov. 2004 à 20:31
Arnaud16022 > ben pompe dans le code d'un compilo gnu
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 nov. 2004 à 20:26
[mode je-parle-de-moi]
en fait c'est plus proche du Basic, sauf qu'il n'y a pas d'implémentation des sub (fonctions écrites par le scripteur), donc ça limite un peu; c'est juste bon pour mon jeu.
je mets pas le code parce qu'il est complètement orienté RPG Engine, et du couo pas réutilisable, et parce que c'est mon premier langage: il souffre d'erreurs de conception que j'ai décelée plus tard ds le dvpt et que j'ai pas corrigées.
je pense en fait bcp à réécrire un interpréteur générique, modulaire. si je fais ça un jour, je posterai le code ici.
/mode
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
18 nov. 2004 à 20:09
-> kirua : wais j'avais vu, j'avais halluciné en voyant ton fichier de script, presque du c++... c'est trop fort comme truc, dommage que t'aies pas mis le code , j'aurais fait un joli copier-coller ;)
cs_Kirua Messages postés 3006 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 31 décembre 2008
18 nov. 2004 à 17:05
En C++, on préfèrera des fonctions inline à des macros préprocesseurs, qu sont un héritage archaïque du C.
Ça a l'avantage d'être plus rigoureusement vérifié par le compilateur (type renvoyé, type des paramètres etc...) et puis surtout, imagine une macro de ce genre:

#define Abs(x) ((x) < 0 ? (-x) : (x))

si tu l'appelles comme ceci:

Abs(un_objet->get_value_par_un_long_algo())

il va réeffectuer l'algo autant de fois que x est appelé dans ta macro, ce qui est potentiellement bugguant / très lent.

il faut préférer l'écriture:

inline type Abs(type var) { return var < 0 ? -var : var; }

à la rigueur, si ça t'énerve de devoir définir cette fonction pour tous les types (int, float, double, les long et les short associés), tu peux templatiser ce genre de chose.



#include
#include <stdio.h>
#include <string.h>

en C++, on écrit ceci:

#include
#include <cstdio>
#include <cstring>

normallement ton compilateur devrait rouspetter, je ne comprends pas :/


j'ai pas bcp cherché, mais est-ce que tu supportes les fonctions? et est-ce qu'elles peuvent être multi-paramétriques?


Tu devrais rajouter l'opérateur ^ (puissance: x^y = x élevé à la puissance y)


Tu gagnerais énormément en clarté/propreté et en réutilisabilité si tu intégrais tout ceci dans une classe CExpression. J'ai déjà écrit deux classes de ce genre par le passé (de deux façon différentes), et ça te permet vraiment d'atteindre une longueur de code minimale / une clarté phénoménale.


Bonne continuation ;)

by the way, je suis impatient de voir ton langage de script; j'en ai écrit un pr un projet de RPG, et c'est un sujet qui me passionne :)
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
18 nov. 2004 à 00:06
je corrige une regle:

10 ++ var // NE SERA PAS EN ERREUR, sera 10 + +var
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
17 nov. 2004 à 23:46
ah oui, je met presque tout dans un seul fichier, parce que pour l'instant c'est pas finit, le but final que je veux obtenir est un interpreteur de script qu'un programme X peut appeler par des fonctions, et devra etre multithread, alors pour linstant je prefere globaliser tout pour plus de facilité.
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
17 nov. 2004 à 23:42
pour afficher le resultat pose un break juste apres l'appel de expression(ligne,&res); dans la boucle while de prog() et regarde ca (int *)res->data pour les entiers

si tu veux comprendre les regles, fait un trace

mais je vais enumerer quelques regles que jai fais:
(jespere ne pas me tromper, je fais ca de memoire)

var ++ 4 // erreur, va traduire var++ 4
10 ++ 4 // va etre traduit par 10 + +4
10 ++ var // erreur, sera tarduit par 10 ++var
var ++ var // erreur, traduit par var++ var

++++4 -----> +(+(+(+4)))
++++var ----> +(+(++var))
+4+++var ----> +4 + ++var
Arnaud16022 Messages postés 1329 Date d'inscription vendredi 15 août 2003 Statut Membre Dernière intervention 16 juin 2010 2
17 nov. 2004 à 22:51
quelques trucs que je ne comprends pas:
+++++var;
+-5
+4+++var;

sinon ca a l'air trop bien, dommage que tu n'affiches pas le resultat au fur et a mesure.
Je vais un peu potasser ca, j'ai jamais compris comment on pouvait coordonner 1400 lignes dans un seul fichier.
J'ai bien envie de faire un copier - coller dans mon prog... mais ca serait pas fair-play hein ? :) (et pis de tte facon j'en n'ai pas encore besoin, mais ca viendra)
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 nov. 2004 à 19:20
ok je vois, au niveau de la synthaxe c'est meme plus claire comme ca int("444");
syncppfrance Messages postés 33 Date d'inscription lundi 12 avril 2004 Statut Membre Dernière intervention 16 décembre 2004
17 nov. 2004 à 18:37
- exact djl, autant pour moi, mais jai specifié C parce que yauras pas de class ou de << ou autre specificité du C++.

- coucou747, si tu remarques ce sont des mises a jour sur des blabla, pas du code.
l'utilité de recreer un langage est le meme que pour mirc ou unreal, vbs, javascript, et jen passe!!!
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
17 nov. 2004 à 16:29
"les convertisseurs int(), float(), string() v = int("444");"

c'est pas du c, c'est du c++ (appel d'un constructeur)
en c les transtypage c'est (Type)...
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
17 nov. 2004 à 14:14
posté aujourd'hui et autant de mises a jour ??
ça a l'air pas mal, mais pourquois recréer un language ? pour une utilisation particulière ? ou pour porter qqch ?
Rejoignez-nous