Programme de Coloration syntaxique - C++ - Programmation
Marsh Posté le 31-07-2008 à 18:15:09
t'as compilé ton code ou c'est moi qui est rien compris :
Code :
|
tu fait quoi là exactement ???
Sinon aprés c'est assez moche, pas de passage par références, des fonctions partout à la rache, des globales, des statiques et pas d'objets ...
foreach_arg => BOOST_FOR_EACH
Code :
|
Ce prototype est débile, tu renvoie pas la fonction après l'appel mais le résultat ...
T'es sur d'avoir globalement compris el C++ ou tu crois que c'est de l'interprété pour le web aussi ?
Marsh Posté le 01-08-2008 à 08:40:47
C'est une joke ?
Code :
|
Eh bien mes amis, y a core du boulot. Désolé de cette critique, mais c'est la vérité
Marsh Posté le 01-08-2008 à 10:32:41
Citation :
|
Je tente en vain d'inclure les bibliothèques nécessaire et juste les necessaire mais je n'ai trouvé aucune technique pour y arriver, mon but est déviter les doubles inclusions sans pour autant inclure des fichiers inutilement...
Citation : Sinon aprés c'est assez moche, pas de passage par références, des fonctions partout à la rache, des globales, des statiques et pas d'objets ... |
D'après ce que je comprend :
Citation : C'est une joke ?
|
Je vois pas bien où est mon erreur...
J'accepte volonté la critique, ta réponse intermédiaire aurait quand même pût être plus pertinente...
Legende :
[1] Je ne vois pas tellement en quoi ça gangraine mon code
[2] Il me semble que je n'ai utilisé aucune variable static, pour les globales il me semble, par contre que j'en ait par-ci par là
[3] Des suggestions ?
J'aimerais bien que ces points soit éclairci par ton expérience, par avance merci...
PS : Je me met au boulot tout de suite
Marsh Posté le 01-08-2008 à 10:38:02
Non mais attend ta compilé ton code au moins ?
Code :
|
Je dirais plus rien tant que tu auras pas pris un compilo, compilé et corrigé ton monceau de billevesés :E
En vrac :
un include c'est résolu à la compilation pas à l'execution
std:: c'est partout ou nulle part, pas 1 fois sur 12
main c'est int main(int, char**) , on est pas en JAVA
les fonctions on les declare avant de les utiliser
tes prototypes sont pour la plupart incohérent
finc renvoit un iterateur par un booleen
et j'en passe
Ah et pour les références ... c'est l'inverse, il faut que tu en mete a chaque fois que tu passe un objet en argument.
J'attendrais que tu es vraiment lu le Stroustrup avant de t'expliquer la notion de const aussi.
Marsh Posté le 01-08-2008 à 12:55:00
comme le dit Joel c'est un "tantinet" (un gros tantinet) le bordel
tu ne peux pas ajouter des includes n'importe ou n'importe comment, un include çà sert à la compilation, donc tu ne PEUX PAS faire +ou- d'include en fonction de paramètres déterminés à l'exécution.
De plus : tu peux très bien gérer l'inclusion pour ne pas avoir de doublon, et encore heureux car si on utilise des librairies on ne doit pas forcément connaitre tout les includes qui sont fait en cascade : il suffit d'utiliser les balises dans tout fichier .h, genre :
Code :
|
si tu veux par exemple une fonction coloration qui ai une implémentation différente en fonction du type de code tu utilisera plutôt du vrai C++, avec des classes, de l'héritage etc...
un genre de truc dans ce style :
Code :
|
et tu pourras alors utiliser un code à peu pres correct par la suite, par exemple en stockant quelque part la correspondance 'langage', et parser, un truc dans le style (attention j'ai pas dit que ct la bonne solution, c'est un bête exemple):
Code :
|
Marsh Posté le 01-08-2008 à 13:16:05
ok, bon, reprennons tout à zéro :
Voilà comment j'ai raisonné :
I-1. Je veux faire un colorateur syntaxique donc je dois récupérer un flux d'entrée
I-2. Je décide que ce flux sera divisé en deux partie : le premier argument indiquera le langage, le second, le code source
I-3. Je récupère ça avec int main(int argc, char* argv[]), page 131 du livre...
I-4a. Je récupère le premier argument, donc le langage demandé
I-4b. Je supprime le premier argument avec argv.pop_front();, car il ne sera pas parsé
II-1. Je transforme ma liste d'arguments en chaine (d'où ma fonction implode()) pour pouvoir lui appliquer des REGEX
II-2a. Si mon langage appartient à mon tableau j'appel la fonction, donc j'aurais inclus toutes les bibliothèques, malheureusement...
II-2b. Je retourne le retour de la fonction de parsage...
III-1. quoi qu'il arrive, je retourne le code, parser ou non vers le flux de sortie (via std::cout)
III-2. Je retourne la valeur 0 pour indiqué que le programme s'est déroulé en entier...
Mon raisonnement est-il bon ? Puis-je l'améliorer ?
IV-Problèmes :
1. Où imbriquer les objets ?
2. Comment mieu gérer la mémoire ?
Par avances merci de vos réponses
Marsh Posté le 01-08-2008 à 13:23:42
ben évidemment tu dois inclure toutes les bibliothèques... si tu veux faire un parser qui décode plusieurs langages il contient fatalement de quoi décoder chaque langage et donc la plupart ne servira pas... c'est un exécutable quoi, tu peux pas en changer le contenu là on sent que tu n'as pas tout saisi au fait que ce soit un langage compilé.
C'est comme si tu voulais que ton photoshop modifie son exe pour n'être capable d'ouvrir que le type de fichier que tu ouvres... ben non il a dans son code de quoi ouvrir tout les types qu'il connaît et il n'en mourra pas.
Marsh Posté le 01-08-2008 à 13:34:20
Première erreur, un tableau en C++ n'est pas un objet comme en JAVA ou en PHP mais un type atomique sans méthode.
En outre, argv est en lecture seule.
Tu peut pas faire autrement à l'instant T. Y a de smoyens propres (chargement de bibliothèque dynamique par exemple) mais c'est hors de ta portée pour l'instant.
Marsh Posté le 01-08-2008 à 14:02:31
juste une question: si c'est pour un colorateur syntaxique pourquoi ne pas utiliser des bibliothèques existantes plutot quer de réinventer la roue?!
Edit: euhh le titre du topic ne me semble pas correct ... "script" ???? on est pas en php!
Marsh Posté le 01-08-2008 à 14:50:17
Joel F a écrit : |
aie-je le droit que faire :
Code :
|
afin de pouvoir continuer à reprendre ma procédure ?
papangue a écrit : juste une question: si c'est pour un colorateur syntaxique pourquoi ne pas utiliser des bibliothèques existantes plutot quer de réinventer la roue?! |
Exacte, rectifié. Pour la gloire et le succès ^^, surtout, pour ma boite qui veut tout faire toute seule
http://knightoffear.free.fr/ColorC [...] -0-02a.zip
Marsh Posté le 01-08-2008 à 15:02:50
tu veux faire un colorateur syntaxique ? utilise notepad ++ ou vi (vim, gvim...) ou emacs ou gedit ou kwrite enfin bref un truc déjà fait ^^
Marsh Posté le 01-08-2008 à 15:05:54
theg a écrit : tu veux faire un colorateur syntaxique ? utilise notepad ++ ou vi (vim, gvim...) ou emacs ou gedit ou kwrite enfin bref un truc déjà fait ^^ |
Tout est dit je crois...
Marsh Posté le 01-08-2008 à 15:06:38
c clair que çà serait plus efficace...
et sinon non tu n'as pas le droit d'écrire directement
Code :
|
Marsh Posté le 01-08-2008 à 15:18:14
Malkav a écrit : aie-je le droit que faire :
|
Essaye compile, vois le message d'erreur, comprend, corrige, re-essaye, re-compile.......
Sans être grossier ni méchant, mais la réponse à ce genre de question tu l'auras grâce à ton compilateur.
Marsh Posté le 01-08-2008 à 18:50:33
Résultat :
Citation : |
Pourquoi ne trouve-t-il pas la bibliothèque ?
http://knightoffear.free.fr/ColorC [...] -0-02b.zip
Marsh Posté le 01-08-2008 à 19:03:49
t'as renseigné le chemin vers les .h via -I ou l'option qui va vient dans ton IDE
Tu sais compilé ou tu jettes juste du code en vrac ?
et apparemment t'as rien compris au principe de fonction :
Code :
|
Jamais ça marche ça ...
Je crois qu'avant de faire le kador en C++ t'as le droit de lire le Kernigham&Ritchie, apprendre à te servir d'un compilateur et comprendre ce que tu fais
Marsh Posté le 01-08-2008 à 19:52:29
Joel F a écrit : t'as renseigné le chemin vers les .h via -I ou l'option qui va vient dans ton IDE |
Disons simplement que CodeBlock est un cousin éloigné, pour ta seconde remarque, on va dire ni l'un ni l'autre, je connais la touche F9...
Joel F a écrit :
|
J'ai simplement raisonné par rapport au exemple qui utilisait dans fonction dans mon livre...
Je ne comprend effetivement rien, je raisonne juste par analogie...
Joel F a écrit : |
kador, bof, si c'était le cas, je penses que tes paroles seraient vaines, je comprends ce que je fais, mais de là à dire que le compilateur me comprend, ça c'est autre chose...
Si je résume mes tors :
on avance, doucement mais sûrement...
Marsh Posté le 01-08-2008 à 19:54:27
je retire ce que je dit pour Appel_Fonction, j'avais oublié le masquage template du type pointeur de fonction
Par contre, prends du temps pour comprendre la différence entre langage compilé et PHP
Marsh Posté le 01-08-2008 à 20:30:25
Joel F a écrit : je retire ce que je dit pour Appel_Fonction, j'avais oublié le masquage template du type pointeur de fonction |
La différence est simple, PHP est compilé à la volé, pour faire simple, avoir que les langages compilés on besoin d'être "assimilé" par le compilateur, puis transformé en langage proche du langage machine, donc une opérations supplémentaire...
J'ai revus les modèles (templates), je vais m'attaquer à mon IDE,
A demain
Marsh Posté le 03-08-2008 à 10:33:51
ReplyMarsh Posté le 03-08-2008 à 13:40:34
Theorie du Kaos a écrit : y'a du boulot |
Je confirme, j'ai du mal à dompter le fauve...
Je vais y arriver : "tout est possible, tout est réalisable..."
Marsh Posté le 09-08-2008 à 14:13:18
changelog : http://knightoffear.free.fr./Color [...] -0-03a.zip
J'ai tenté une vingtaines de compilations :
Citation : |
BOOST bug ?
Citation : |
J'ai respécté les règles, pourquoi il veut pas ?
Citation : |
Pourquoi il me le dit. On dirait qu'il a perdu un truc ?
Citation : |
Pourquoi il me le dit ?
Citation : |
Comment puis-je résourdes ses erreurs de conversions ?
Citation : D:\_X\cpp\ColorCodes\KolorCodes\main.cpp|65|error: invalid operands of types `const char*' and `const char[3]' to binary `operator+'| |
C'est un string normalement, d'après ma déclaration...
Citation : D:\_X\cpp\ColorCodes\KolorCodes\main.cpp|68|warning: statement has no effect| |
Par avance merci de votre aide...
Marsh Posté le 09-08-2008 à 19:16:52
1/ boost ne bug que rarement. Regarde le message d'erreur et la doc de for_each ...
2/ on n'initialiase pas du code en plein milieu d'un .h ....
3/ RTFM
4/ RTFM
5/ oui mais non, erreur du à l'erreur 2/
Marsh Posté le 09-08-2008 à 20:37:05
j'ai bossé ça, j'ai mit un coup de pied à BOOST FOREACH : http://knightoffear.free.fr/ColorC [...] -0-03b.zip
Citation : D:\_X\cpp\ColorCodes\KolorCodes\langages.cpp|30|error: expected constructor, destructor, or type conversion before '=' token| |
J'ai revus mon code, il veut toujours rien savoir...
Citation : |
Code :
|
Je bloque sur ce point, some help, please...
Citation : |
D'après ce que je comprend, il trouve pas la méthode ?
Citation : |
Comment concaténer 3 char,
[quote]
D:\_X\cpp\ColorCodes\KolorCodes\main.cpp|66|warning: statement has no effect|
||=== Build finished: 5 errors, 1 warnings ===|
[quote]
A cause du 2...
un peu d'aide ?
On y est presque ^^
Marsh Posté le 09-08-2008 à 21:24:19
non, pas vraiment.
Tu peux nous expliquer avec des mots ce que tu essaies de faire là :
Code :
|
et là :
Code :
|
?
question subsidiaire : quel est le type de
Code :
|
à ton avis ?
Marsh Posté le 10-08-2008 à 12:07:04
SquiZZ a écrit :
|
1/ Je tente de créer une map, avec une allocation pour une seule paire
Correction :
Code :
|
2/
Correction :
Code :
|
j'insert un pair de string (clef/valeur)
3/ je dirais un char[]
malgrès ces deux corrections, une erreur persistent :
Citation : D:\_X\cpp\ColorCodes\KolorCodes\langages.cpp|30|error: expected constructor, destructor, or type conversion before '.' token| |
...aidez moi, je vois toujours pas.
Citation : D:\_X\cpp\ColorCodes\KolorCodes\main.cpp|64|warning: character constant too long for its type| |
Je ne comprends pas...
Citation : D:\_X\cpp\ColorCodes\KolorCodes\main.cpp|58|error: wrong type argument to bit-complement| |
Code :
|
Pourquoi ne veut-il ps me supprimmer cette variable ? elle n'est pas en lecture seule...
Il me manque la méthode count, insert et la surcharge d'opérateur à map, je fais comment pour y acceder
http://knightoffear.free.fr/ColorC [...] -0-03c.zip
Marsh Posté le 10-08-2008 à 15:48:41
on appelle pas un destructeur sur une variable locale .. elle est détruite automatiquement.
Reprend ton bouquin depuis la page 1 stp v_v, j'ai mes yeux qui saignent.
Marsh Posté le 10-08-2008 à 16:41:48
Joel F a écrit : on appelle pas un destructeur sur une variable locale .. elle est détruite automatiquement. |
Merci de ta patience et de ton entêtement, sur ce, j'ai deux questions :
1. comment optenir les partie manquante ?
2. Comment puis-je rendre mon script optimal, tant au point de vue de la lecture, que des performance et de la qualité d'éxécution ?
Par avance merci
Marsh Posté le 10-08-2008 à 17:08:55
je comprends pas ta question 1
la question 2, 'en ai encore loin. On verra quand ton truc compilera deja
Marsh Posté le 10-08-2008 à 17:19:18
Joel F a écrit : je comprends pas ta question 1 |
Lorsque je tente une compilation j'obtiuens ces messages :
Citation : ||=== KolorCodes, Debug ===| |
Hors, langage est une map, d'après ce que je comprend, je tente de faire appel à des méthodes, et à un opérateur inéxistant, je pense que ça vient de la définition std::map qui ne doit pas être complète...
D'où ma question : comment compléter mon modèle ?
Marsh Posté le 10-08-2008 à 17:35:32
non std::map est complet, tu utilsies juste des trucs qui n'existe aps. Lis la doc de map stp
Marsh Posté le 10-08-2008 à 17:54:04
J'ai cherché un moment avant d'avoir cette hypothèse :
Les [] : [url]http://www.cplusplus.com/reference/stl/map/operator[].html[/url]
Effectivement, au lieu de faire
Code :
|
Je fais :
Code :
|
Différences : j'ai un std::string, ils ont un char, j'ai une porté, pas eux, langage, la clef, est dynamique...
insert : http://www.cplusplus.com/reference/stl/map/insert.html
Eux :
Code :
|
Moi :
Code :
|
un dernier ?
count : http://www.cplusplus.com/reference/stl/map/count.html
Eux :
Code :
|
Moi :
Code :
|
Voila, voila...
Marsh Posté le 10-08-2008 à 19:40:09
y a pas à faire d'hypothèse, le compilo te file une erreur de type, t'as la doc. Après c'est comme dans le journal de Mickey, c 'est le jeu des "Une Erreur" ...
Tu comprends la notion de type et de signature de méthode ou pas ? car là c'est typiquement ça. Ça n'a aucun rapport avec le fait que tes trucs soit dynamiques ou pas, du nombre de scope etc
Marsh Posté le 10-08-2008 à 20:04:50
Joel F a écrit : y a pas à faire d'hypothèse, le compilo te file une erreur de type, t'as la doc. Après c'est comme dans le journal de Mickey, c 'est le jeu des "Une Erreur" ... |
La notion de type je maitrise, la notion de signature de méthode je pense que c'est la même chose, mais par rapport aux méthode ; donc ce serait un problème de type, je bosse ça et je reviens...
Marsh Posté le 11-08-2008 à 17:07:25
J'ai bossé un peu, et il ne me reste plus qu'une erreur :
Citation : D:\_X\cpp\ColorCodes\KolorCodes\langages.cpp||In function `int main(int, char***)':| |
Code :
|
Code :
|
Voilà, je ne comprend pas trop, pc si je commente ou que j'enlève la déclaration de l'espace nom... j'ai la même erreur
Par avance merci de votre aide
changelog : [url]http://knightoffear.free.fr/ColorCodes/colorcodes-0-04a.zip[cpp]
Marsh Posté le 31-07-2008 à 16:52:11
Bonjour,
Je suis novice en C++, enfin j'ai lût et globalement compris "Le langage C++", par Bjarne Stroustrup, ça fait 3 ans que je pratique PHP5, et j'ai atteint un niveau correcte. Voilà vous savez tout de moi
Je viens ici car actuellement je code un Script de Coloration syntaxique pour pouvoir me passer de pygment, et pour avoir une plus grande vitesse.
Je compte utiliser l'entête <boost/regex>, et j'aimerais votre avis sur le travail que j'ai déjà réalisé...
J'aimerais que vouus soyez très critique, dites moi où ais-je mal fait mon travail, si possible comme le faire mieu, n'omettez rien
http://knightoffear.free.fr/ColorC [...] -0-01a.zip
J'aimerais y implémenter une gestion de la mémoire et un système de cache à court therme, si vous avez une idée de la manière pour y arriver...
Voilà, le résultat sera renvoyé a un script PHP, je compte sur le système de cache pour éviter d'avoir à recalculé tout le code si l'utilisateur s'apperçoit qu'il à oublié de dire bonjoir et qu'il réédite son message ou qu'il le visualise, donc les balise de coloration seront en CSS ^^
Message édité par Profil supprimé le 01-08-2008 à 14:37:59