English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
How to get an AST of OCaml source?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2005-02-24 (07:02)
From: Sylvain LE GALL <sylvain.le-gall@p...>
Subject: Re: [Caml-list] How to get an AST of OCaml source?

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 : 

And look at :

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...