Parseur ActionScript2 en PHP : premier essai
Par -Alexandre LEGOUT aka LAlex- le jeudi, décembre 11 2003, 17:39 - AS2 - Lien permanent
Pour continuer sur le projet d'un site communautaire autour de classes ActionScript 2, j'ai commencé à développer un parseur AS2 en PHP et ses fantastiques expressions régulières PERL, auxquelles j'ai eu du mal à me mettre, étant habitué aux expressions régulières POSIX. Depuis, les trouvant beaucoup plus puissante, je ne rate pas une occasion de les utiliser ! ![]()
En effet, lors de la publication de classes sur un site tel que celui que j'imagine, il faut pouvoir connaitre pour une classe la signature de son constructeur et de ses méthodes, afin de s'assurer que d'autres classes les utilisant ne vont pas être perturbées par une modification. Ca peut permettre aussi une génération automatique de commentaires ! ![]()
Pour l'instant, il manque encore les import au niveau des dépendances, et la détection des getter/setter ... :°
Le problème est que étant donné que je code un peu toujours de la même manière en terme d'organisation du code, mes tests ne sont pas forcément des plus objectifs !
Donc, si vous avez développé des classes AS2 et que vous voulez les tester dans ce prémice de parseur, ce serait super sympa de me signaler les quelques bugs qui peuvent apparaître sur vos propres classes. Je l'ai essayé sur les classes GPathfinder et GDispatcher de Grant Skinner, et il a l'air de fonctionner ...
Pour les inquiets, je ne sauvegarde absolument rien des codes qui peuvent être saisis dans ce parseur. ![]()
Commentaires
Bien joué vraiment ! Ca s'annonce bien.
Je serai heureux de participer sur un tel projet quand il sera opérationnel. J'ai toujours rêvé d'un truc dans le genre et je trouve très chouette que tu aies le courage, l'énergie et le talent pour le faire.
Pourquoi ne carrément pas le transformer en projet communautaire en plusieurs langues avec une team de modérateurs ? ^^
Franchement top

beau boulot ^^
Sympa ce truc, on peut voir la source ?
Nan !

En fait, j'attends d'avoir un truc un peu plus complet avant de publier la source : gestion accrue des dépendances et référencement des getter/setter ...
Oki, en tout cas si tu as besoin d'un coup de main, ou pour une relecture tu sais où je suis
C'est bien a ca que je pense !
Je pensais faire un espèce de SourceForge plus ouvert, purement orienté code au départ, puis pourquoi pas aprés orienté projet avec des créations de teams, etc...
Le but de départ est de permettre l création de code optimisé par plusieurs codeurs qui ne se connaissent pas forcément et qui pourront confronter leurs différentes manières de programmer.
Une fois le sustème développé, le problème va être au départ de trouver des modérateurs et de faire connaitre le site. :o Je pensais faire des utilisateurs français des cobayes, pour aller pourquoi pas vers une version multilingue !
Mais avant il me faudra acheter un nom de domaine ... ce que mes maigres moyens ne me permettent pas de faire ...
Ce me brache bien cette histoire de source forge, en plus ça tombe en plein dans un de mes projets perso
Si jamais tu décide de le faire, tu peux compter sur moi
Je veux bien participer si tu veux
^^
Pareil, je trouve cette idée tres interressante
Merci de votre soutien, je suis content de voir que l'idée plait en tout cas ! ^^ De toutes facons, se sera à voir lorsque le développement sera plus avancé ... 8|
La je galère pour ce qui est de trouver les délimitations de chaines de caractères : car une chaine de caractères n'est pas seulement un ensemble de caractères situés entre deux " ... S'il y a un \" au mileu, il ne faut pas que je m'arrête ! Mais il transmets l'antislah de manière assez bizarre, et je suis limite en train de devenir dingue !!!
:P
D'ailleurs, je me suis rendu compte par la même occasion que le colorisateur de code ne gère pas cet aspect :
:(
var test:String = "Ceci est une double quote : \" et ca arrete la colorisation";Face a se genre de chose je peux que m'incliner.
Ben justement, dès que j'en aurais fini avec Emma je voulais partir sur la création d'un colorisateur de code à la beautifier mais en plus performant, et je voulais savoir si te branchait qu'on fasse à à deux ;), sinon je le fait tout seul, c'est pas un soucis
Ben en fait, parti comme je suis pour le parseur, je vais finir par avoir tout ce qu'il me faut pour faire un colorisateur ... 8|
Mais pour l'instant je vais me focaliser sur le simple parsing de code, et son application dans le cadre d'un site de codage ...
Ensuite, si tu veux, on se penche sur la colorisation. Le plus dur étant d'être suffisemment générique pour pouvoir gérer un paquet de langage ... :°
Maintenant le problème des chaines de caractères résolu, il ne me manque plus que celui des commentaires de fin de ligne, qui ont du code "executable" devant eux (qui ne sont pas tout seuls sur la ligne quoi ! :o) ...

var myVar:Number = 10; // Il faut gérer ca;var mySite = "<a href="http://www.lalex.com/" rel="nofollow">http://www.lalex.com/</a>"; // Mais pas les deux / de l'URL ...
Donc, qwix, si c'est pas urgent pour toi, on pourra s'y mettre ensemble !
Ben justement je voyais assez ça comme un package générique auquel tu ajoutes le module du langage qui te fait plaisir, comme avec beautifier quoi
C'est pas urgent du tout
Salut lalex
En fait pour gerer ce pb de anti-slash il va peut etre falloir que tu créé un language si tu vois ce que je veux dire. Ce n'est pas une chose evidente mais c'est un projet tres interessant.
Mais peut etre que tout simplement les expressions regulieres le permettent
Bonne continuation
Pas besoin de créer un langage je pense

Avec un bon pattern ça devrait être réglé
Le problème des antislashs est réglé !
Il me reste celui des commentaires sur le même ligne qu'une ligne de code ... 
Essaies de détecter le " " ainsi pour pourra voir si un commentaire "//" et sur une ligne ou pas
Quelqu'un sait il ou trouver une grammaire du langage AS 2.0 ?
Pasqu'il existe des parser de grammaire qui te generent des sources pour pouvoir parser simplement un fichier source.
a ce que g compris, a terme tu voudrais faire un autre sourceforge ?
pourquoi reinventer la roue ? il existe deja des projets pour faire ca (avec bug tracking et tout) ce qui permet de se concentrer sur les projets (ou le code) que tu veux fournir.
Euh ... un autre sourceforge, pas vraiment ... :roll: C'était juste une image pour donner une vague idée de ce que ca pourrait être ...
En fait, de ce que j'en sais (car je ne l'ai jamais utilisé), Sourceforge apporte aux équipes de développement tous les outils pour un travail collaboratif. Moi je veux fournir un outil qui permet de soumettre un code sans forcément faire partie d'un team dejà montée. Ou de proposer une implémentation de certaines fonctionnalités, tout en permettant à chacun de proposer une meilleure implémentation : plus logique ou plus optimisée ...
Si ensuite, je peux y gréffer un système de teams, pourquoi pas ?
Mais je veux faire un outil propre à AS2, qui puisse récupérer un cetain nombre d'informations d'une classe, et en déduire les dépendances, et ce afin de garder une certaine cohérence dans les interférences entre différentes classes ... :o
ok
oui source forge c pour le travail collaboratif dans des teams...
ton parser, il pourrait pas sortir du XML ? si tu peux faire ca, moi je te ponds un chtit truc qui te genere une sorte de javadoc en fonction des commentaires mis dans le code ...
la question reste pour la grammaire AS 2.0 ... des idees/suggestions ?
Merci
Ca serait comme FlashDoc mais en OpenSource et donc gratuit
Tout ce qu'il faut faire c choper les commentaires avant la classe et devant tous les membres (public).
ex :
/*** Une classe Comment sert a voir si les commentaires style javadoc fonctionnenent
* @author Kalysto
* @see net.toytoy.CommentTwo
* @version 1.0
* @since 0.2
*/
class net.toytoy.Comment {
/** The comment's message */
public var msg:String;
/** jolie constante non ? */
public static var CONSTANT:Number = 42;
/**
* Create a new Instance of Comment
* @param m the comment message
*/
public Comment(m:String) {
msg = m;
}
/**
* create a Comment
* @param m the comment message
* @return the Comment instance
*/
public static function createComment(m:String):Comment {
return new Comment(m);
}
}
Oui, ce parser pourrait tout à fait générer du XML. Pour l'instant, il ressort un arborescence de tableaux associatifs : il suffit de remplacer ca par des balises XML !
Sinon, comment pourrait fonctionner ton générateur de FlashDoc ? :o Moi, je pensais deja récupérer les signatures des méthodes, et en faire des commentaires justement ... 8| Toi tu veux te baser sur les commentaires deja présents ? :o
Il va falloir qu'on cause de ca un peu !
Ben il recoit un fichier XML qui represente une classe AS, avec les commentaires recuperable.
Apres, on peut parser le commentaire pour en sortir :
- la documentation
- les params
- les exceptions thrown
- les todo
- bref tous les tags (@qqch) qu'on veut
Apres, ca nous fait un autre fichier xml qui n'incorpore que les infos dont on a besoins (commentaires + signatures)
on cree une feuille de style XSLT et pouf, on gagne une page web toute bien formatée qui est une sorte de javadoc.
Bref le principe c :
.as - php parser -> xml - comment parser -> xml(avec les commentaires) - XSLT -> HTML
de toute facon, on ne peut pas creer la doc a la place de l'utilisateur, on peut juste la mettre en forme.
Ya juste a se mettre d'accord sur un format de doc. moi je preconise javadoc paske ca me semble pratik et bien concu de base ...
Oui, même si je ne l'utilise pas, la réputation de JavaDoc n'est plus à faire !
Par contre, du coup, ce ne serait pas incompatible avec une génération des commentaires par rapport aux signatures du code ... pour permettre une saisie plus facile pour les gens qui n'ont pas forcément l'habitude de commenter leur code d'un manière bien précise (comme moi :oops:) : un outil qui interviendrait avant pourrait leur proposer des zones de saisie à remplir ... 8|
Pour avoir un peu plus d'infos sur le "format" JavaDoc, le /** (avec deux étoiles) fait partie du standard ? :o Et dans ta classe exemple, je ne vois pas d'infos sur les types du retour et des arguments, c'est normal ? :o
A+
dans les IDE classiques, la saisie de la javadoc est prise en charge par des wizards ... mais c'est pendant le codage, pas pendant le parsage du fichier kil faut le faire ...
Enfin c'est un autre outil
le /** indique le debut d'un commentaire javadoc, il ne peut yen avoir que devant les fields, methodes et classes (et interfaces :)) : les /** a l'interieur d'une fonction n'est pas pris en compte!
Ben, javadoc s'appuie aussi sur les signatures des methodes pour en retirer les informations de types et de retour. Normal, les infos y sont dejas, pourkio les reecrire dans la doc ?
Par contre, ca necessite du code bien fait pour ke ca fonctionne ! Les gens ki oublieront le typage fort vont l'avoir dans l'os
Ben, mon parseur gère aussi les signatures sans typage fort ... aprés il faut voir si on accepte de l'intégrer dans le JavaDoc s'il n'y est pas ... 8|
Quand à "l'aide au commentaire", personnellement, tant que le code n'est pas trop immense, je préfère commenter à la fin (si je suis tout seul à coder évidemment), et ce genre de petit outil peut être sympa ...
ben on a ka mettre Object
comme ca c generique 
C une mauvaise habitu de ke g du mal a perdre le "mais si! je vais commenter a la fin!"
C'est vrai !
Mais c'est pas évident d'aller contre ... Moi maintenant, je publie mes codes, comme ca je me sens obligé de les commenter !!! 
un bon point pour l'open source
on se sent obliger de documenter son code 
lol
Pense à commenter facon PHPdoc
nicolas >> Le format reste à définir, et pour être franc, je ne pense pas m'en occuper ! :°
Si le moment venu je trouve quelqu'un qui veut me filer un coup de main la dessus, ce sera à lui de définir le format ...
J'ai déja fait et fini un parseur AS2, il fonctionne avec un BD MySQL.
si tu as des questions, tu as mon icq : 49165571 (impossible de mettre mon email : email non valide ???)
oui, les regexp sont les + compliqués a faire, surtout pour les propriétés + méthodes s'écrivant pareil pour des classes différentes ...
j'utilise un systeme en 2 passes :
1-reconnaissance et remplacement du code par des balises
2-remplacement des balises par l'HTML pour colorier et/ou lier le code
pour le 1 :
-commence par virer tout ce qui est commentaire
-en 2eme, toutes les chaines (attention ou ' inclus dans ") ...
mon dieu que c'est compliqué. ca me fait tres envi mais je n'arrive pas appliquer pour mes propres projets c'est contrariant
Fil des commentaires de ce billet