<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Hoa Forum - Bienvenu à Hoa_Compiler]]></title>
	<link rel="self" href="http://forum.hoa-project.net/feed/atom/topic/329/"/>
	<updated>2010-04-19T20:30:24Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.hoa-project.net/topic/329/bienvenu-a-hoacompiler/</id>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2227/#p2227"/>
			<content type="html"><![CDATA[Hey,

Merci pour cette bonne nouvelle.
Je vais tester tout ça par curiosité.]]></content>
			<author>
				<name><![CDATA[tetardo]]></name>
				<uri>http://forum.hoa-project.net/user/65/</uri>
			</author>
			<updated>2010-04-19T20:30:24Z</updated>
			<id>http://forum.hoa-project.net/post/2227/#p2227</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2212/#p2212"/>
			<content type="html"><![CDATA[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 : [i]7,f[/i] va produire une transition-epsilon vers l'automate 7, puis consommer l'action [i]f[/i]. 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) : [url=http://twitter.com/hoaproject/status/12116452672]premier exemple d'exporation[/url], [url=http://twitter.com/hoaproject/status/12119046453]amélioration quelques minutes plus tard[/url]. 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 [i]on-fire[/i], bien concret comme on les aime. Ce dernier n'est pas tout à fait terminé, mais le plus gros est fait.

Amusez-vous bien :).]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-04-13T19:13:12Z</updated>
			<id>http://forum.hoa-project.net/post/2212/#p2212</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2099/#p2099"/>
			<content type="html"><![CDATA[Pourquoi ne pas mettre ça sur les actions de l'état initial de ton sous-automate pointé par ta transition-epsilon ?]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-03-19T08:17:28Z</updated>
			<id>http://forum.hoa-project.net/post/2099/#p2099</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2098/#p2098"/>
			<content type="html"><![CDATA[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]]></content>
			<author>
				<name><![CDATA[Savageman]]></name>
				<uri>http://forum.hoa-project.net/user/6/</uri>
			</author>
			<updated>2010-03-18T21:24:24Z</updated>
			<id>http://forum.hoa-project.net/post/2098/#p2098</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2086/#p2086"/>
			<content type="html"><![CDATA[J'ai mis à jour [url]http://dropbox.android-bay.net/Praspel.phps[/url] 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 ;).]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-03-17T14:59:27Z</updated>
			<id>http://forum.hoa-project.net/post/2086/#p2086</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2084/#p2084"/>
			<content type="html"><![CDATA[Pas reçu tes mails. Ou alors ils sont passés en spam. Recommence voir maintenant s'il te plaît :).]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-03-17T14:43:28Z</updated>
			<id>http://forum.hoa-project.net/post/2084/#p2084</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2083/#p2083"/>
			<content type="html"><![CDATA[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. :D
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. :p]]></content>
			<author>
				<name><![CDATA[Savageman]]></name>
				<uri>http://forum.hoa-project.net/user/6/</uri>
			</author>
			<updated>2010-03-17T12:39:19Z</updated>
			<id>http://forum.hoa-project.net/post/2083/#p2083</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2081/#p2081"/>
			<content type="html"><![CDATA[Tu as écrit sur mon adresse i***.end*****@hoa-project.net ?

Pour les numéros d'actions, ça se passe de cette façon :
[list=*]
[*]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.[/*]
[/list]

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 : [code]/*               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)[/code] 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 :).

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 ;).

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 :) ?]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-03-17T12:16:44Z</updated>
			<id>http://forum.hoa-project.net/post/2081/#p2081</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2079/#p2079"/>
			<content type="html"><![CDATA[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.

@+]]></content>
			<author>
				<name><![CDATA[Savageman]]></name>
				<uri>http://forum.hoa-project.net/user/6/</uri>
			</author>
			<updated>2010-03-16T22:12:02Z</updated>
			<id>http://forum.hoa-project.net/post/2079/#p2079</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2068/#p2068"/>
			<content type="html"><![CDATA[Je n'ai pas mes mails de tout le week-end, mais sinon jette un œil à [url=http://dropbox.android-bay.net/Praspel.phps]Praspel.phps[/url].

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 : [code] protected function pre ( &$in ) {

    return;
}[/code] et ce sera suffisant :).

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 [url=http://twitter.com/hoaproject/status/10332858720]dernier tweet[/url] sur les performances de Hoa_Compiler :P ?]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-03-14T09:24:11Z</updated>
			<id>http://forum.hoa-project.net/post/2068/#p2068</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2067/#p2067"/>
			<content type="html"><![CDATA[Fatal error: Class Foo contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (Hoa_Compiler_Ll1::pre) in C:\wamp\www\tests\hoa-sass\index.php on line 38

Je voulais m'y mettre aujourd'hui, c'est ballot que t'as changé des trucs entre-temps. En plus aucune version tagué n'existe pour ça, et j'ai pas spécialement envie de prendre tout le SVN pour récupérer une révision en particulier. ^^

Tu as déjà mon mail normalement. ;)]]></content>
			<author>
				<name><![CDATA[Savageman]]></name>
				<uri>http://forum.hoa-project.net/user/6/</uri>
			</author>
			<updated>2010-03-13T14:36:25Z</updated>
			<id>http://forum.hoa-project.net/post/2067/#p2067</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2026/#p2026"/>
			<content type="html"><![CDATA[Hoa_Compiler est terminé je pense :).

J'ai ajouté le support des lignes et colonnes pour chaque lexème (obligatoire pour une belle gestion d'erreur entre autre) accessibles [i]via[/i] les attributs [i]line[/i] et [i]column[/i]. L'exemple est remis en ligne : [url]http://dropbox.android-bay.net/Ll1.phps[/url]. On notera que plus aucun compteur n'est dorénavant nécessaire. En effet, Hoa_Compiler est maintenant un beau compilateur [b]LL(1)[/b] basé sur des [b]sous-automates[/b] à [b]pile[/b], c'est à dire qu'on a une « récursivité » (émulée). Plus besoin donc de trucs et astuces pour compter les parenthèses, accolades, crochets etc. (tout élémentaire formant une paire tout du moins).

Je vous laisse lire l'exemple, il est [i]a priori[/i] parlant.

Maintenant je reprends Hoa_Test (pour mes recherches à l'Université) et j'attaque Hoa_Xml (nécessaire pour XYL ;)).]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-03-01T21:36:13Z</updated>
			<id>http://forum.hoa-project.net/post/2026/#p2026</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2023/#p2023"/>
			<content type="html"><![CDATA[Surtout qu'à la déclaration, ça ne change pas grand chose. Au lieu d'avoir un tableau pour la table de transitions, on aura un tableau de tableau. Pareil pour les tokens, skip, actions etc.]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-02-25T14:13:32Z</updated>
			<id>http://forum.hoa-project.net/post/2023/#p2023</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2022/#p2022"/>
			<content type="html"><![CDATA[Je m'en vois ravi ! Je sens que ça va gérer, ça va diminuer la complexité de l'ensemble en regroupant les états et transitions indépendants en plus petits groupes.
J'ai hâte de tester ! :)]]></content>
			<author>
				<name><![CDATA[Savageman]]></name>
				<uri>http://forum.hoa-project.net/user/6/</uri>
			</author>
			<updated>2010-02-24T19:33:10Z</updated>
			<id>http://forum.hoa-project.net/post/2022/#p2022</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re : Bienvenu à Hoa_Compiler]]></title>
			<link rel="alternate" href="http://forum.hoa-project.net/post/2021/#p2021"/>
			<content type="html"><![CDATA[Maintenant Hoa_Compiler supporte les sous-automates. C'est beaucoup plus puissant et plus rapide. Je vais recoder un exemple demain dans la journée, c'était prévu :).

L'idée est que tu as tes sous-automates liés par des transitions-epsilon, et qu'un état doit d'abord rentrer et sortir de son sous-automate lié avant de continuer. Ça permet d'avoir des boucles assez complexes ou de mieux gérer les parenthèses, accolades etc., bref : tout ce qui aurait besoin de piles.]]></content>
			<author>
				<name><![CDATA[Hywan]]></name>
				<uri>http://forum.hoa-project.net/user/2/</uri>
			</author>
			<updated>2010-02-24T19:16:10Z</updated>
			<id>http://forum.hoa-project.net/post/2021/#p2021</id>
		</entry>
</feed>

