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.7 required=5.0 tests=AWL,DNS_FROM_RFC_ABUSE, DNS_FROM_RFC_POST autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id B7836BBAF for ; Sun, 8 Mar 2009 16:55:48 +0100 (CET) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AsACAPeGs0nZkrECmWdsb2JhbACVKQEBAQEBCAsKBxGteoEHjiABBIQF X-IronPort-AV: E=Sophos;i="4.38,325,1233529200"; d="ml'?scan'208";a="24020527" Received: from web27002.mail.ukl.yahoo.com ([217.146.177.2]) by mail3-smtp-sop.national.inria.fr with SMTP; 08 Mar 2009 16:55:48 +0100 Received: (qmail 31051 invoked by uid 60001); 8 Mar 2009 15:55:47 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.fr; s=s1024; t=1236527747; bh=amCx0WxgisrtdpgLEqi7kPyuJK14RqPliWFsMuSh8os=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:MIME-Version:Content-Type; b=xt20tfkwLsWUwwPx9QvZa4+jVspOG+IjBmpbpWeZvHJGY8JJTk1hDgxksqeT+9TJGOP8uSs8nfsccvboFM/t5o5Re94rWqJcZv7oL0GLNqD1Bv4GX/Mj/2Ne+QBe/iFIwuhxZCihXZ8pp+L0GQHZzyw4umPsgRfxtw4WKn6ve6s= DomainKey-Signature:a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=Message-ID:X-YMail-OSG:Received:X-Mailer:References:Date:From:Subject:To:MIME-Version:Content-Type; b=FeHwBnFl2KHjptji3v1+kzHO7b6RFosrzakPDVHx/pr2s93nsvZGqXVXY86mEpSRisITYNHh5rmQoxoHyjXKI/Ntp4ZHFmYYUcOYkPu4z59B27ZVeFTY/D51LQ+x0xOVQb13jMSZdO923+reYOxY6Z47qrM00K3xDJqWR2vRZcE=; Message-ID: <567172.30775.qm@web27002.mail.ukl.yahoo.com> X-YMail-OSG: .ppi2oUVM1lE2oKkeMd6h2OXgImwW7xIxmaDkVKrPQf_RJhYajF6NoiY0sQtaHIkmwjDXk8fDKdZPAI3wuCgUgUadktIMQIAschX4c_3lg0ED_F0ph1W2OpOfK27ypzULu7wAi3UAsuh2Y1jVCNv5MVPhYCg6Geo4zz7Y6EjskHOQCJpHt3bK0BhqtIttg-- Received: from [82.242.132.106] by web27002.mail.ukl.yahoo.com via HTTP; Sun, 08 Mar 2009 15:55:47 GMT X-Mailer: YahooMailRC/1155.45 YahooMailWebService/0.7.289.1 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> Date: Sun, 8 Mar 2009 15:55:47 +0000 (GMT) From: Matthieu Wipliez Subject: Re : [Caml-list] Re: camlp4 stream parser syntax To: O'Caml Mailing List MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-519165074-1236527747=:30775" X-Spam: no; 0.00; matthieu:01 camlp:01 parser:01 syntax:01 elegantly:01 inserting:01 hash:01 camlp:01 struct:01 struct:01 lexer:01 lexer:01 kwd:01 kwd:01 lowercase:01 X-Attachments: cset="utf-8" type="application/octet-stream" name="Static1.ml" name="Static1.ml" --0-519165074-1236527747=:30775 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > I don't think this will work elegantly.=0A> =0A> Static first makes a Str= ucture (is make the right term?) and then makes a bunch =0A> of other modul= es using it. A custom Structure will be needed to downcase the =0A> keyword= s before inserting them into the hash table, so Static will need to be =0A>= duplicated as well.=0A=0AWell I just duplicated Static to Static1 (and add= ed Camlp4.Struct.Grammar where necessary) and replaced:=0A module Structur= e =3D Camlp4.Struct.Grammar.Structure.Make Lexer;=0Aby:=0A module Structur= e =3D struct=0A include Camlp4.Struct.Grammar.Structure.Make Lexer;= =0A =0A value using { gkeywords =3D table; gfilter =3D filter= } kwd =3D=0A let kwd =3D String.lowercase kwd in=0A let = r =3D try Hashtbl.find table kwd with=0A [ Not_found ->=0A = let r =3D ref 0 in do { Hashtbl.add table kwd r; r } ]=0A= in do { Token.Filter.keyword_added filter kwd (r.val =3D 0);=0A = incr r };=0A end;=0A=0AThis way, I redefine "using" to my li= king, the only modification being the lower-casing on the first line.=0A=0A= Structure is then passed to other functors as usual.=0ANote that you need t= o compile Static1 with camlp4r because it is revised syntax (in ocamlbuild = _tags this is camlp4r, use_camlp4).=0AThis seems to work (you need the lowe= rcase in match_keyword too btw): I have "acTIon" and "actiON" in the parser= , and parses "action" in input files.=0A=0ACheers,=0AMatthieu=0A=0A=0A=0A = --0-519165074-1236527747=:30775 Content-Type: application/octet-stream; name="Static1.ml" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Static1.ml" KCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCigqICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqKQooKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9iamVjdGl2ZSBDYW1sICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKikKKCogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICop CigqICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOUklBIFJvY3F1ZW5j b3VydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKQooKiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKikKKCogIENvcHlyaWdodCAgMjAwNiAg IEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSAgZW4gIEluZm9ybWF0 aXF1ZSBldCAgICopCigqICBlbiBBdXRvbWF0aXF1ZS4gIEFsbCByaWdodHMg cmVzZXJ2ZWQuICBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgICAq KQooKiAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlLCB3aXRoIHRoZSBzcGVjaWFsICAgKikKKCogIGV4Y2Vw dGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBMSUNFTlNFIGF0IHRoZSB0 b3Agb2YgdGhlIE9iamVjdGl2ZSAgICopCigqICBDYW1sIHNvdXJjZSB0cmVl LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqKQooKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KikKKCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiopCgooKiBBdXRo b3JzOgogKiAtIERhbmllbCBkZSBSYXVnbGF1ZHJlOiBpbml0aWFsIHZlcnNp b24KICogLSBOaWNvbGFzIFBvdWlsbGFyZDogcmVmYWN0b3JpbmcKKikKCm9w ZW4gQ2FtbHA0OwoKdmFsdWUgdW5jdXJyeSBmICh4LHkpID0gZiB4IHk7CnZh bHVlIGZsaXAgZiB4IHkgPSBmIHkgeDsKCm1vZHVsZSBNYWtlIChMZXhlciA6 IFNpZy5MZXhlcikKOiBTaWcuR3JhbW1hci5TdGF0aWMgd2l0aCBtb2R1bGUg TG9jID0gTGV4ZXIuTG9jCiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBt b2R1bGUgVG9rZW4gPSBMZXhlci5Ub2tlbgo9IHN0cnVjdAogIG1vZHVsZSBT dHJ1Y3R1cmUgPSBzdHJ1Y3QKCQlpbmNsdWRlIENhbWxwNC5TdHJ1Y3QuR3Jh bW1hci5TdHJ1Y3R1cmUuTWFrZSBMZXhlcjsKCQkKCQl2YWx1ZSB1c2luZyB7 IGdrZXl3b3JkcyA9IHRhYmxlOyBnZmlsdGVyID0gZmlsdGVyIH0ga3dkID0K CQkJbGV0IGt3ZCA9IFN0cmluZy5sb3dlcmNhc2Uga3dkIGluCgkgICAgbGV0 IHIgPSB0cnkgSGFzaHRibC5maW5kIHRhYmxlIGt3ZCB3aXRoCgkgICAgICAg ICAgICBbIE5vdF9mb3VuZCAtPgoJICAgICAgICAgICAgICAgIGxldCByID0g cmVmIDAgaW4gZG8geyBIYXNodGJsLmFkZCB0YWJsZSBrd2QgcjsgciB9IF0K CSAgICBpbiBkbyB7IFRva2VuLkZpbHRlci5rZXl3b3JkX2FkZGVkIGZpbHRl ciBrd2QgKHIudmFsID0gMCk7CgkgICAgICAgICAgICBpbmNyIHIgfTsKCWVu ZDsKICBtb2R1bGUgRGVsZXRlID0gQ2FtbHA0LlN0cnVjdC5HcmFtbWFyLkRl bGV0ZS5NYWtlIFN0cnVjdHVyZTsKICBtb2R1bGUgSW5zZXJ0ID0gQ2FtbHA0 LlN0cnVjdC5HcmFtbWFyLkluc2VydC5NYWtlIFN0cnVjdHVyZTsKICBtb2R1 bGUgRm9sZCA9IENhbWxwNC5TdHJ1Y3QuR3JhbW1hci5Gb2xkLk1ha2UgU3Ry dWN0dXJlOwogIGluY2x1ZGUgU3RydWN0dXJlOwoKICB2YWx1ZSBncmFtID0K ICAgIGxldCBna2V5d29yZHMgPSBIYXNodGJsLmNyZWF0ZSAzMDEgaW4KICAg IHsKICAgICAgZ2tleXdvcmRzID0gZ2tleXdvcmRzOwogICAgICBnZmlsdGVy ID0gVG9rZW4uRmlsdGVyLm1rIChIYXNodGJsLm1lbSBna2V5d29yZHMpOwog ICAgICBnbGV4ZXIgPSBMZXhlci5tayAoKTsKICAgICAgd2FybmluZ192ZXJi b3NlID0gcmVmIFRydWU7ICgqIEZJWE1FICopCiAgICAgIGVycm9yX3ZlcmJv c2UgPSBDYW1scDRfY29uZmlnLnZlcmJvc2UKICAgIH07CgogIG1vZHVsZSBF bnRyeSA9IHN0cnVjdAogICAgbW9kdWxlIEUgPSBDYW1scDQuU3RydWN0Lkdy YW1tYXIuRW50cnkuTWFrZSBTdHJ1Y3R1cmU7CiAgICB0eXBlIHQgJ2EgPSBF LnQgJ2E7CiAgICB2YWx1ZSBtayA9IEUubWsgZ3JhbTsKICAgIHZhbHVlIG9m X3BhcnNlciBuYW1lIHN0cm0gPSBFLm9mX3BhcnNlciBncmFtIG5hbWUgc3Ry bTsKICAgIHZhbHVlIHNldHVwX3BhcnNlciA9IEUuc2V0dXBfcGFyc2VyOwog ICAgdmFsdWUgbmFtZSA9IEUubmFtZTsKICAgIHZhbHVlIHByaW50ID0gRS5w cmludDsKICAgIHZhbHVlIGNsZWFyID0gRS5jbGVhcjsKICAgIHZhbHVlIGR1 bXAgPSBFLmR1bXA7CiAgICB2YWx1ZSBvYmogeCA9IHg7CiAgZW5kOwoKICB2 YWx1ZSBnZXRfZmlsdGVyICgpID0gZ3JhbS5nZmlsdGVyOwoKICB2YWx1ZSBs ZXggbG9jIGNzID0gZ3JhbS5nbGV4ZXIgbG9jIGNzOwoKICB2YWx1ZSBsZXhf c3RyaW5nIGxvYyBzdHIgPSBsZXggbG9jIChTdHJlYW0ub2Zfc3RyaW5nIHN0 cik7CgogIHZhbHVlIGZpbHRlciB0cyA9IFRva2VuLkZpbHRlci5maWx0ZXIg Z3JhbS5nZmlsdGVyIHRzOwoKICB2YWx1ZSBwYXJzZV90b2tlbnNfYWZ0ZXJf ZmlsdGVyIGVudHJ5IHRzID0gRW50cnkuRS5wYXJzZV90b2tlbnNfYWZ0ZXJf ZmlsdGVyIGVudHJ5IHRzOwoKICB2YWx1ZSBwYXJzZV90b2tlbnNfYmVmb3Jl X2ZpbHRlciBlbnRyeSB0cyA9IHBhcnNlX3Rva2Vuc19hZnRlcl9maWx0ZXIg ZW50cnkgKGZpbHRlciB0cyk7CgogIHZhbHVlIHBhcnNlIGVudHJ5IGxvYyBj cyA9IHBhcnNlX3Rva2Vuc19iZWZvcmVfZmlsdGVyIGVudHJ5IChsZXggbG9j IGNzKTsKCiAgdmFsdWUgcGFyc2Vfc3RyaW5nIGVudHJ5IGxvYyBzdHIgPSBw YXJzZV90b2tlbnNfYmVmb3JlX2ZpbHRlciBlbnRyeSAobGV4X3N0cmluZyBs b2Mgc3RyKTsKCiAgdmFsdWUgZGVsZXRlX3J1bGUgPSBEZWxldGUuZGVsZXRl X3J1bGU7CgogIHZhbHVlIHNydWxlcyBlIHJsID0KICAgIFN0cmVlIChMaXN0 LmZvbGRfbGVmdCAoZmxpcCAodW5jdXJyeSAoSW5zZXJ0Lmluc2VydF90cmVl IGUpKSkgRGVhZEVuZCBybCk7CiAgdmFsdWUgc2ZvbGQwID0gRm9sZC5zZm9s ZDA7CiAgdmFsdWUgc2ZvbGQxID0gRm9sZC5zZm9sZDE7CiAgdmFsdWUgc2Zv bGQwc2VwID0gRm9sZC5zZm9sZDBzZXA7CiAgKCogdmFsdWUgc2ZvbGQxc2Vw ID0gRm9sZC5zZm9sZDFzZXA7ICopCgogIHZhbHVlIGV4dGVuZCA9IEluc2Vy dC5leHRlbmQ7CgplbmQ7Cg== --0-519165074-1236527747=:30775--