11

Re : Bienvenu à Hoa_Compiler

Je n'ai pas mes mails de tout le week-end, mais sinon jette un œil à Praspel.phps.

La méthode pre() a été ajoutée pour modifier le code avant de l'analyser (si jamais on a des lexèmes alternatifs ou des aliases de lexèmes). Au pire, écrit juste :

 protected function pre ( &$in ) {

    return;
}

et ce sera suffisant smile.

J'ai pratiquement terminé le compilateur de Praspel. Ça fera un exemple avec vérification (de types, de contrôles etc.). Ce sera un exemple complet.

Tu as vu mon dernier tweet sur les performances de Hoa_Compiler tongue ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

12

Re : Bienvenu à Hoa_Compiler

Merci beaucoup, j'ai du début. ^^

Malheureusement, je ne comprends pas tout bien l'utilisation (notamment les numéros d'action positifs). Je t'ai envoyé un mail à ce propos.

@+

13

Re : Bienvenu à Hoa_Compiler

Tu as écrit sur mon adresse i***.end*****@hoa-project.net ?

Pour les numéros d'actions, ça se passe de cette façon :

  • négatifs : auto-gestion des tampons ; impair pour remplissage, pair pour vidage ;

  • caractère ou chaîne de caractères : va être consommé par la méthode consume() ;

  • positifs : transition-epsilon vers un autre automate.

Donc les actions positives indiquent un lien entre deux sous-automates. Les sous-automates sont dans un tableau dont l'index commence à 0. Sauf que 0 signifie action vide dans notre cas. Donc on ajoute 1, comme si le tableau des sous-automates commençait à 1. Rien de gênant en soit (surtout si c'est bien commenté).

Sauf qu'on ne les place pas n'importe où. Prenons un exemple :

/*               r   e   t   i   p   ;
/* __ */ array(  0,  0,  0,  0,  0,  0),
/* GO */ array(  0,  0,  0,  0,  0,  0),
/* EX */ array(  2,  2,  0,  2,  0,  0),
/* LI */ array(  0,  0,  3,  0,  0,  0),
/* IN */ array(  0,  0,  0,  0,  0,  0)

On regarde EX/r, ça se lit de cette façon : si on est arrivé dans l'état EX grâce au léxème r, alors on a une transition-epsilon/lien vers le sous-automate numéro 2, avant d'exécuter l'action de cet état ou de consommer le lexème suivant.

Les transitions-epsilon sont effectuées quand on arrive dans l'état, alors que les actions sont effectuées quand on sort de l'état. Attention à bien faire la distinction smile.

Cas particulier : quand on veut avoir une transition-epsilon sur un état initial. Problème. Bah oui, on ne connaît pas ou il n'existe pas un lexème qui nous y a conduit. Donc dans ce cas, on se place en 1/0 (GO/premier lexème), et on place notre lien. Pour vraiment le comprendre, j'ai mis quand c'est possible des liens sur toutes la ligne/tous les lexèmes. On insiste wink.

C'est peut être un peu bancale comme façon de faire, mais je n'ai pas trouvé mieux. Je ne voulais pas avoir des tableaux supplémentaires, il y en a déjà bien assez comme ça. Surtout qu'on travaille en programmation dynamique, comprendre que je conserve des calculs/résultats partiels en mémoire durant l'exécution pour ne pas les retraiter. Donc il y a des micro-tableaux qui naissent et qui meurent durant l'exécution. Je ne voulais pas en rajouter encore.

Ton avis ?
Tu fais quoi avec smile ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

14

Re : Bienvenu à Hoa_Compiler

Merci pour les détails !
Oui j'ai envoyé sur l'adresse @hoa-project.net.
Je vais voir si je peux mieux me dépatouiller avec tes explications, mais j'ai des problèmes du style Invalid Token et donc l'enchainement s'arrête. Problème de gestion des espaces notamment (qui sont en théorie dans skip, mais qui ne le seront plus à la fin).
Mon avis c'est que je vais réfléchir sur ton truc car c'est encore un peu flou dans ma petite tête. big_smile
Je vais me tenter à un parseur SASS. Un travail de fond sur la structure de données sera nécessaire, mais ce n'est pas ce qui me pose de souci pour l'instant. tongue

15

Re : Bienvenu à Hoa_Compiler

Pas reçu tes mails. Ou alors ils sont passés en spam. Recommence voir maintenant s'il te plaît smile.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

16

Re : Bienvenu à Hoa_Compiler

J'ai mis à jour http://dropbox.android-bay.net/Praspel.phps pour l'exemple.

Au passage, on peut voir à quel point utiliser un modèle objet est plus facile pour compiler plutôt qu'un arbre de syntaxe abstrait … Oui je troll, mais j'ai le droit wink.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

17

Re : Bienvenu à Hoa_Compiler

Merci pour l'aide apporté !

Je ne sais pas si c'est un cas particulier, mais je souhaite effectuer une action en même temps qu'une transition epsilon vers un autre sous-automate. Est-ce possible sans créer d'état virtuel exprès ? ^^ (Je verrais bien un return 2 dans la fonction consume() par exemple.)

[edit] Et également un changement d'état en même temps qu'un remplissage de tampon. :D

Dernière fois dit par Savageman (18 Mar. 2010 22:45)

18

Re : Bienvenu à Hoa_Compiler

Pourquoi ne pas mettre ça sur les actions de l'état initial de ton sous-automate pointé par ta transition-epsilon ?

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

19

Re : Bienvenu à Hoa_Compiler

Nouveauté : possibilité de combiner des actions entre elles (deux maximum) pour un même état. Voir la documentation API pour plus de formalité, mais de façon informelle : 7,f va produire une transition-epsilon vers l'automate 7, puis consommer l'action f. C'est pratique quand on a un état avec plusieurs actions d'un coup (j'en ai eu besoin pour Praspel avec l'implémentation des tableaux).

Autre nouveauté : l'exportation vers DOT à travers __toString(). J'en parle sur Twitter (avec lien vers les PNG) : premier exemple d'exporation, amélioration quelques minutes plus tard. Je pense que le format final est sympa.
En tout cas, c'est très très pratique pour debugger ! Lors de l'implémentation des tableaux pour Praspel, j'ai passé 2 jours sur une erreur vraiment bête car j'avais oublié de déclarer un état terminal. Avec l'export DOT (puis PNG), je l'aurai vu immédiatement !

Voilà pour Hoa_Compiler. Les exemples sont donnés avec Hoa_Test_Praspel_Compiler, un exemple on-fire, bien concret comme on les aime. Ce dernier n'est pas tout à fait terminé, mais le plus gros est fait.

Amusez-vous bien smile.

« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

20

Re : Bienvenu à Hoa_Compiler

Hey,

Merci pour cette bonne nouvelle.
Je vais tester tout ça par curiosité.

Le code c'est comme le paic citron, quand il y en a plus... il y en a encore !