From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=AWL,SPF_NEUTRAL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from discorde.inria.fr (discorde.inria.fr [192.93.2.38]) by yquem.inria.fr (Postfix) with ESMTP id 3480BBC69 for ; Mon, 19 Mar 2007 14:02:27 +0100 (CET) Received: from wx-out-0506.google.com (wx-out-0506.google.com [66.249.82.225]) by discorde.inria.fr (8.13.6/8.13.6) with ESMTP id l2JD2P75028135 for ; Mon, 19 Mar 2007 14:02:26 +0100 Received: by wx-out-0506.google.com with SMTP id i26so1355281wxd for ; Mon, 19 Mar 2007 06:02:25 -0700 (PDT) DKIM-Signature: a=rsa-sha1; c=relaxed/relaxed; d=gmail.com; s=beta; h=domainkey-signature:received:received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=HJ6aYaQ9HaSdo9+ZdltO5pkrRdGCGTwHkTyonfMtTHI31lGGybUOPLI9WnfNrcGFaIDzTZsPvX1vHQ+bimK65FD07xK37dxBLZbzBxeop0e57iiW+tao9odwMaAnB0DTQL9IZ7HIaHxLqkp/ovhjMEnqNdcPZBWHO5NMfD9IQbs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=beta; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=e9MQrfASuhNTImW0AcFrSoX5W3L9AYApNwKDInaDkykyuzCSnIb43pmhL/W9rPMa8rpE0vIWcCW0i09p2gCGt0I0+nTC/31M7ZWLX03dScbSv+8xuNdsrchAnyhTUykwpnLDEkWWDPWHNmwJU1psn6qyBTxUoD2VTehII1u+0gM= Received: by 10.90.106.11 with SMTP id e11mr3841433agc.1174309344774; Mon, 19 Mar 2007 06:02:24 -0700 (PDT) Received: by 10.114.183.4 with HTTP; Mon, 19 Mar 2007 06:02:24 -0700 (PDT) Message-ID: Date: Mon, 19 Mar 2007 14:02:24 +0100 From: "Nicolas Pouillard" To: "Loup Vaillant" Subject: Re: [Caml-list] Where are the AST specs? Cc: caml-list@yquem.inria.fr In-Reply-To: <6f9f8f4a0703190353p4d38ea32k30e1ad2a00f70f4@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <6f9f8f4a0703181022q2b9d7f8bt33919e07f3799c65@mail.gmail.com> <95513600703190145h5a0c6202t518ff61fcde83655@mail.gmail.com> <6f9f8f4a0703190217o5a975a78s16fe2be77825af01@mail.gmail.com> <6f9f8f4a0703190353p4d38ea32k30e1ad2a00f70f4@mail.gmail.com> X-j-chkmail-Score: MSGID : 45FE89E1.003 on discorde : j-chkmail score : X : 0/20 1 0.000 -> 1 X-Miltered: at discorde with ID 45FE89E1.003 by Joe's j-chkmail (http://j-chkmail . ensmp . fr)! X-Spam: no; 0.00; camlp:01 syntax:01 ifdef:01 camlp:01 ocaml:01 syntax:01 ocaml:01 expr:01 expr:01 cmo:01 wrote:01 imho:01 caml-list:01 assert:01 macros:01 On 3/19/07, Loup Vaillant wrote: > > BTW camlp4 provides a simple macro system through a dynamic syntax > > extension. It features DEFINE, IFDEF, INDEF, and INCLUDE. > > Actually, I didn't meant C macros. Yes, but these are somewhat better than C ones. > > However camlp4 is itself a powerful way to manage the OCaml syntax as > > AST through it's quotation system. > > That is what I meant. However, I want it as simple as possible. > > > Have you a simple specification of what you want for OCaml (or some examples). > > For instance, I woud have wanted > (defun f x y z (+ x (* y z))) DEFINE F(x, y, z) = x + y * z;; F(F(1, 2, 3), 4, 5);; [...] > another example: > (+ x y z) > > (plus (plus x y) z) Yes the macro extension is to weak for that. Here is a camlp4 snippet todo it: $ cat macros.ml open Camlp4.PreCast;; AstFilters.register_str_item_filter begin Ast.map_expr begin function | <:expr@loc< \!+ ($tup:e$) >> -> begin match Ast.list_of_expr e [] with | [] | [_] -> assert false | x :: xs -> List.fold_left (fun acc x -> <:expr@loc< $acc$ + $x$ >>) x xs end | <:expr< \!+ $e$ >> -> e | e -> e end end#str_item;; Can be used like that: $ cat test_macros.ml !+ (1, 2, 3, 4);; $ camlp4o ./macros.cmo test_macros.ml let _ = ((1 + 2) + 3) + 4 > I havent specified the macro system yet. I think I shoud wait untill i > have written a reader. (And therefore specified an AST) IMHO starting from the macro extension of camlp4 and write a new one more powerful is a good way to go. -- Nicolas Pouillard