From mboxrd@z Thu Jan 1 00:00:00 1970 Received: by margaux.inria.fr, Wed, 17 Mar 93 18:00:56 +0100 Received: from pauillac.inria.fr by margaux.inria.fr, Wed, 17 Mar 93 14:47:53 +0100 Received: by pauillac.inria.fr; Wed, 17 Mar 93 14:47:50 +0100 Message-Id: <9303171347.AA17396@pauillac.inria.fr> Subject: Re: Stream patterne matching To: cr@dcs.ed.ac.uk Date: Wed, 17 Mar 1993 14:47:49 +0100 (MET) Cc: Michel.Mauny@inria.fr, caml-list@margaux In-Reply-To: <4353.9303171131@campay.dcs.ed.ac.uk> from "cr@dcs.ed.ac.uk" at Mar 17, 93 11:31:10 am From: Michel.Mauny@inria.fr (Michel Mauny) Reply-To: Michel.Mauny@inria.fr Organization: INRIA, BP 105, F-78153 Le Chesnay Cedex, France Phone: (+33) 1 39 63 57 96 -- Fax: (+33) 1 39 63 53 30 X-Mailer: ELM [version 2.4 PL13] Content-Type: text/plain Sender: weis@margaux > Ok, Si j'ai bien compris le fait d'abstraire une re`gle fait perdre des > factorisations. Ce qui est illustre' par l'exemple suivant : > > #let E = function > # [< '0; '1 >] -> true > # |[< '0; '2 >] -> false;; > > est factorisable. Mais > > #let pp = function p -> function > # [< '0; '1 >] -> true > # |[< p _ ; '2 >] -> false;; > > ne l'est pas. Pourtant (pp (function [<'0 >] -> ())) est e'quivalent a` E. > > Es-je bien compris ? Oui, tout a` fait. > Pourtant, j'ai un doute. si l'on essaye E, on s'aperc,oit qu'il y a un cas > inutilise dans le patterne matching. Une factorisation est donc ne'cessaire. Il > faut la faire a la main ! Tandis que dans pp, le compilo ne bronche pas. caml > fait donc de'ja une diffe'rence entre les deux. Le compilo fait une diffe'rence et il peut envoyer un warning dans le premier cas, alors que dans le second, il ne sait rien du tout. > Ne pourrais t'on pas au moins faire la factorisation quand le compilo signale > un cas inutilise' dans le matching ? Avec e'ventuellement un warning pour > l'utilisateur ? Il y a une diffe'rence importante entre envoyer un warning disant a` l'utilisateur: Attention: votre programme ne fait peut-e^tre pas ce que vous attendez de lui! et un autre disant: Attention: j'ai CHANGE' votre programme de sorte qu'il fasse ce que (je suppose) que vous attendez de lui! J'exage`re un peu (de'sole'), mais l'important est que le comportement des analyseurs actuels est uniforme, pas de cas particuliers, et cela en facilite l'explication. Encore une fois, sur une notion plus "declarative" de grammaires, je crois qu'on pourra faire beaucoup plus de choses (analyses et optimisations) inte'ressantes. > Mais l'essentiel n'est-il pas que si (pp p) est factorisable alors E(p') l'est > aussi ? (cela esr vrai, je pense ?) Oui, je crois que c'est vrai, mais c'est une e'quivalence qu'on voudrait, car l'exemple d'abstraction de sous-expression que je donnais dans mon message pre'ce'dent est re'versible en ``inlining''. Ces manipulations (a` la main) de programmes sont tre`s courantes, et il serait dommage qu'elles soient trop complexes a` cause de subtilite's ope'rationnelles. > Y a-t'il des exemples plus complexes ? On doit tomber sur de ve'ritables casse-te^tes lorsqu'il s'agit de traduire une grammaire BNF existante (Yacc ou whatever) en analyseurs de Caml-Light, mais je n'ai personnellement que peu d'expe'rience en la matie`re. Michel