Version française
Home     About     Download     Resources     Contact us    
Browse thread
Ocaml 3.01 and camlp4 syntax?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Martin Jambon <martin.jambon@e...>
Subject: Re: [Caml-list] Ocaml 3.01 and camlp4 syntax?
Erik de Castro Lopo wrote:
> Hi all,
> 
> Mostly out of curiosity, I'm having a look at the efuns Emacs
> clone written in Ocaml:
> 
>     http://pauillac.inria.fr/cdrom/prog/unix/efuns/eng.htm
> 
> and trying to compile it with a recent Ocaml compiler like 3.10.2.
> 
>>From the files, it seems that the last version of Ocaml this code
> compiled with was 3.01 (around the year 2000?). I've managed to find
> fixes for a bunch of problems.
> 
> One of those problems was that one of the files (common/options.ml)
> had code like this:
> 
>     open Genlex
>   
>     let lexer = make_lexer [ "=" ; "{" ; "}"; "["; "]"; ";" ; "("; ")"; ","; "."]
>   
>     let rec parse_gwmlrc = parser
>         [< id = parse_id; 'Kwd "="; v = parse_option ; 
>           eof = parse_gwmlrc >] -> (id, v) :: eof
>     | [< >] -> []
> 
> which the current compiler complained about "[<". A bit of googling
> suggested that this was in fact camlp4 source code. Sure enough,
> renaming that file to pa_options.ml and running it throught camlp4
> resulted in a file that the standard compiler digested quite happily.
> 
> I've now come to another file gwml/afterstep.mll that seems to be
> ocamllex source code but again has these camlp4 like extensions.
> Unfortunately camlp4 doesn't like this file, probably because it
> has ocamllex syntax instead of ocaml syntax.
> 
> So, I have two questions :
> 
>  1) Did early versions of ocaml (say up to and including 3.01) handle
>     constructs like those above that were later removed and and added
>     to camlp4 instead?

Exactly.

The 3.10 manual says:


7.2  Streams and stream parsers

The syntax for streams and stream parsers is no longer part of the
Objective Caml language, but available through a Camlp4 syntax
extension. See the Camlp4 reference manual for more information. Support
for basic operations on streams is still available through the
Stream[Stream] module of the standard library. Objective Caml programs
that use the stream parser syntax should be compiled with the -pp
camlp4o option to ocamlc and ocamlopt. For interactive use, run ocaml
and issue the #load "camlp4o.cma";; command.



>  2) Any suggestions on how to handle the camlp4 syntax stuff in an
>     ocamllex source file? Obviously, this code could be extracted
>     and placed in its own file but I'm open to other suggestions.

I don't know. Have you tried ocamllex followed by camlp4?


Martin
-- 
http://mjambon.com/