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