From: Sylvain LE GALL <sylvain.le-gall@polytechnique.org>
To: mulhern <mulhern@cs.wisc.edu>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] How to get an AST of OCaml source?
Date: Thu, 24 Feb 2005 08:02:31 +0100 [thread overview]
Message-ID: <20050224070231.GA13215@gallu.homelinux.org> (raw)
In-Reply-To: <e81dbc44e27d0078e72d08361979e0fd@cs.wisc.edu>
Hello,
On Wed, Feb 23, 2005 at 09:25:59PM -0600, mulhern wrote:
> Hi,
>
> I need to use OCaml source code as input to a tool that generates a
> related sort of output. It's not a source-to-source translator; the
> code generated will not do what the OCaml source code does. It's not a
> pretty printer either, the relationship isn't so direct. I'ld like to
> write the tool itself in OCaml and am hoping to use CamlTemplate.
>
> What is the most direct way to get a useful, easily traversable,
> representation of OCaml source code in OCaml? Clearly, there is one
> embedded in the various ocaml tools.
>
> I understand that Camlp4 will dump out a binary AST, which is then
> input to the OCaml compiler. If that is the best way to go, could
> somebody give me some pointers about how to traverse this AST? I have
> been unable to extract the information from the Camlp4 documentation.
>
> I have also been looking at the OCaml src code distribution. I realize
> it's possible to pass the compiler a flag (dparsetree) that will cause
> a pretty-printed version of the parse tree to be dumped out. On
> examination of compiler.ml I can see how that ast that gets pretty
> printed is constructed. Is my best bet to write an ocaml application
> that just uses a a large chunk of the ocamlc source code modeling the
> application as best I can on the compiler.ml source?
> Or would I be better off parsing the pretty-printed stuff that gets
> dumped out? Or, could I write my own printer that is not so pretty and
> dumps a textual representation that is very easily parsed so that the
> AST can be reconstructed and insert that into my local version of
> ocamlc?
>
> I'm sure people have encountered similar problems before. Any advice
> based on your experience would be very much appreciated.
>
Well, i have written a kind of library called ocaml-ast-analyze. It use
camlp4 to register a printer of source code. You can inject function to
do code analysis using this module and you can be able to analyze
certain part of the code.
I don't have released this library. If you are intersted in it, i can
send you a copy. Can you take a look at the file, and then told me if
you want the source ?
URL :
http://www.gallu.homelinux.org/cgi-bin/viewcvs.cgi/ocaml-ast-analyze/trunk/?root=svn
And look at :
http://www.gallu.homelinux.org/cgi-bin/viewcvs.cgi/ocaml-gettext/trunk/libgettext-ocaml/pr_gettext.ml?rev=359&root=svn&view=auto
for example.
Kind regard
Sylvain Le Gall
ps : it use camlp4, so it is limited to what camlp4 do, for example i
should use the same command line as camlp4 invocation...
prev parent reply other threads:[~2005-02-24 7:02 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-02-24 3:25 mulhern
2005-02-24 7:02 ` Sylvain LE GALL [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20050224070231.GA13215@gallu.homelinux.org \
--to=sylvain.le-gall@polytechnique.org \
--cc=caml-list@yquem.inria.fr \
--cc=mulhern@cs.wisc.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox