modification de syntaxe [was Re: [toulouse-pm] Liste des Membres]

Ronan Le Hy rlehy at free.fr
Tue Sep 17 09:06:39 CDT 2002


Michel Rodriguez wrote:
 > On Tue, 2002-09-17 at 13:58, Ronan Le Hy wrote:
 >> Ca fait un
 >> moment que la syntaxe d'OCaml est modifiable à volonté par l'utilisateur...
 >>
 > Hey! Perl5 aussi autorise la modification de la syntaxe, sinon comment on
 > aurait Acme::Bleach, Acme::Buffy et Lingua::Perligata [...]?

Moui (j'avais presque oublié tout ça). En l'occurrence, ça se résume à des filtres
appliqués sur la source, donc en gros à un truc du genre:
C<
seek DATA,0;
s/pour/for/, $new.=$_ while <DATA>;
eval $new;
 >
(d'ailleurs, il me semble que Acme::Bleach n'est pas beaucoup plus compliqué que ça)

Mais y'a qu'à voir le bordel que c'est pour implanter switch, par exemple (cf 
Switch.pm). Ceci dit, c'est peut-être simplement dû à la saleté des regexps p5*.

En OCaml, j'ai ajouté les 'unless' et 'if' modificateurs
(C<die unless open A,">/etc/passwd">) avec:
C<
EXTEND
expr:
[[
   act = expr LEVEL "simple"; "unless"; cond = expr LEVEL "simple" ->
     <:expr< if not $cond$  then $act$ else () >>
| act = expr LEVEL "simple"; "if"; cond = expr LEVEL "simple" ->
     <:expr< if $cond$  then $act$ else () >>
]]
END
 >

en pseudo-pseudo-perl6:
C<
rule expr |=
{ $act := <simple_expr> unless $cond := <simple_expr>
	{"if (!$cond) {$act}"}
| $act := <simple_expr> if $cond := <simple_expr>
	{"if ($cond) {$act}"}
}
 >

Une fois qu'on est habitué, c'est facile (et concis). Je pense être habitué à lire 
du Perl, eh bien Switch.pm, j'ai un peu de mal.

 >> Quand vous (Tonton?) avez évoqué le truc (filtre anti-spam bayésien) de
 >> Graham sur la liste, j'ai failli mailer en retour ma version de son filtre
 >> en Perl. Mais j'avais pas de corpus pour l'entrainer et le tester... Vous
 >> avez echappé à mes délires théoriques.
 >>
 > Si ca te dis, depuis je stocke tout le spam que je recois ici.

Merci, mais non. De toute façon, je n'ai plus envie de déboguer tout ça :).

Ronan

*: pas l'intention de lancer un troll -- j'ai été contaminé par perl6-language!





More information about the Toulouse-pm mailing list