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=2.7 required=5.0 tests=AWL,DNS_FROM_RFC_POST, 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 mail1-relais-roc.national.inria.fr (mail1-relais-roc.national.inria.fr [192.134.164.82]) by yquem.inria.fr (Postfix) with ESMTP id 90868BBAF for ; Sun, 8 Mar 2009 17:58:38 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AqgCADOWs0lKfU4bkGdsb2JhbACUaj8BAQEBCQkMBxEDrWeBB44XAQMBA4QCBoMT X-IronPort-AV: E=Sophos;i="4.38,325,1233529200"; d="scan'208";a="25244787" Received: from ey-out-2122.google.com ([74.125.78.27]) by mail1-smtp-roc.national.inria.fr with ESMTP; 08 Mar 2009 17:58:38 +0100 Received: by ey-out-2122.google.com with SMTP id 9so114795eyd.15 for ; Sun, 08 Mar 2009 09:58:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:references:message-id:from:to :in-reply-to:content-type:content-transfer-encoding:mime-version :subject:date:cc:x-mailer; bh=YUfSJDZflRsTIlBeF9ZkTKAkKnPNPfGIb0mCDO8mOeo=; b=CQWIkWyHzFscZ1caG7yStvAleC7GCZUEqetT8dTJEAF8xXD3gAkzCVW/QsTT+RHu5X UjEL05/ArChbdlLOGgT8NtOSymo3XNDzWq/Vhkfv2Jgr1nNrrCiOydoeiWZr+Os9qycD Plm2s7rpC0J1JZZ1lC8Oo5jmh8/BjHv/vMa9Q= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=references:message-id:from:to:in-reply-to:content-type :content-transfer-encoding:mime-version:subject:date:cc:x-mailer; b=tukeSL6cAQPeEC84JcUPkWDFpe6/fjE2/bQvCnSVPNYOHLYkxbsoemJNMF8t0jY5YF z0R5QeRyQauzXWyDp8EKh3slyGoTOTB96txoI5d70Xf7X5BugkEl8v4ON53n4pmTJ9ma YOZp9ORGFf4zM0VzUCOifS3qhx6/dt1NLZNaQ= Received: by 10.210.65.2 with SMTP id n2mr1772709eba.26.1236531517958; Sun, 08 Mar 2009 09:58:37 -0700 (PDT) Received: from ?10.10.30.5? (94.Red-88-6-143.staticIP.rima-tde.net [88.6.143.94]) by mx.google.com with ESMTPS id 28sm3315482eyg.25.2009.03.08.09.58.35 (version=TLSv1/SSLv3 cipher=RC4-MD5); Sun, 08 Mar 2009 09:58:36 -0700 (PDT) References: <24D11586-4F15-4B6E-8FB7-58651317164D@gmail.com> <46331.52510.qm@web27007.mail.ukl.yahoo.com> <0B508092-FD71-4733-BC95-B6B87A6D3E6B@gmail.com> <154139.25342.qm@web27007.mail.ukl.yahoo.com> <46FCBABD-7E4A-4077-8227-3816FD6D635D@gmail.com> <279881.54090.qm@web27008.mail.ukl.yahoo.com> <58D957FE-F549-4B2F-9794-6A6651A20A29@gmail.com> <843379.3763.qm@web27007.mail.ukl.yahoo.com> <801023.45786.qm@web27008.mail.ukl.yahoo.com> <2368FDC0-FD1F-49B8-BDE0-53C2D641070B@gmail.com> <149632.77706.qm@web27001.mail.ukl.yahoo.com> <2F6DE824-09BE-4CB2-8AEA-3CAC58203A43@gmail.com> <537901.83501.qm@web27007.mail.ukl.yahoo.com> <1089D291-76A7-408C-BCA4-91F6B47843C4@gmail.com> <567172.30775.qm@web27002.mail.ukl.yahoo.com> Message-Id: <46DFAE87-6CA8-4B60-9B00-4BA4AE11E82A@gmail.com> From: Joel Reymont To: Matthieu Wipliez In-Reply-To: <567172.30775.qm@web27002.mail.ukl.yahoo.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v930.3) Subject: Re: Re : [Caml-list] Re: camlp4 stream parser syntax Date: Sun, 8 Mar 2009 16:58:33 +0000 Cc: O'Caml Mailing List X-Mailer: Apple Mail (2.930.3) X-Spam: no; 0.00; camlp:01 parser:01 syntax:01 matthieu:01 camlp:01 struct:01 struct:01 lexer:01 lexer:01 sig:01 sig:01 kwd:01 endline:01 lowercase:01 kwd:01 On Mar 8, 2009, at 3:55 PM, Matthieu Wipliez wrote: > Well I just duplicated Static to Static1 (and added > Camlp4.Struct.Grammar where necessary) and replaced: > module Structure = Camlp4.Struct.Grammar.Structure.Make Lexer; > by: Something like this you mean? I must be doing something wrong as I never see my printout from 'using'. Thanks, Joel --- Static1.ml --- open Camlp4; open Struct; open Grammar; value uncurry f (x,y) = f x y; value flip f x y = f y x; module Make (Lexer : Sig.Lexer) : Sig.Grammar.Static with module Loc = Lexer.Loc and module Token = Lexer.Token = struct module Structure = struct include Camlp4.Struct.Grammar.Structure.Make Lexer; value using { gkeywords = table; gfilter = filter } kwd = let _ = print_endline ("using: storing " ^ String.lowercase kwd) in let kwd = String.lowercase kwd in let r = try Hashtbl.find table kwd with [ Not_found -> let r = ref 0 in do { Hashtbl.add table kwd r; r } ] in do { Token.Filter.keyword_added filter kwd (r.val = 0); incr r }; end; module Delete = Delete.Make Structure; module Insert = Insert.Make Structure; module Fold = Fold.Make Structure; include Structure; value gram = let gkeywords = Hashtbl.create 301 in { gkeywords = gkeywords; gfilter = Token.Filter.mk (Hashtbl.mem gkeywords); glexer = Lexer.mk (); warning_verbose = ref True; (* FIXME *) error_verbose = Camlp4_config.verbose }; module Entry = struct module E = Entry.Make Structure; type t 'a = E.t 'a; value mk = E.mk gram; value of_parser name strm = E.of_parser gram name strm; value setup_parser = E.setup_parser; value name = E.name; value print = E.print; value clear = E.clear; value dump = E.dump; value obj x = x; end; value get_filter () = gram.gfilter; value lex loc cs = gram.glexer loc cs; value lex_string loc str = lex loc (Stream.of_string str); value filter ts = Token.Filter.filter gram.gfilter ts; value parse_tokens_after_filter entry ts = Entry.E.parse_tokens_after_filter entry ts; value parse_tokens_before_filter entry ts = parse_tokens_after_filter entry (filter ts); value parse entry loc cs = parse_tokens_before_filter entry (lex loc cs); value parse_string entry loc str = parse_tokens_before_filter entry (lex_string loc str); value delete_rule = Delete.delete_rule; value srules e rl = Stree (List.fold_left (flip (uncurry (Insert.insert_tree e))) DeadEnd rl); value sfold0 = Fold.sfold0; value sfold1 = Fold.sfold1; value sfold0sep = Fold.sfold0sep; (* value sfold1sep = Fold.sfold1sep; *) value extend = Insert.extend; end; --- http://tinyco.de Mac, C++, OCaml