[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: comments searched on bit of ocaml code ...



2005/12/30, Sven Luther <sven.luther@wanadoo.fr>:
> On Fri, Dec 30, 2005 at 06:48:24PM +0100, Stefano Zacchiroli wrote:
> > On Thu, Dec 29, 2005 at 03:32:13PM +0100, Sven Luther wrote:
> > > Anyway, it has been a long time since i wrote serious ocaml code, and i have
> > > some doubts about the best way to parse strings, preferably using the less
> > > non-ocaml stuff, so i post my snipplet here for comments.
> >
> > Looking at what you need to do the best way to parse string I can
> > suggest you is the combo:
> >
> >   Stream.of_string + camlp4's stream parsers
>
> since i use it as ocamlrun ocaml script, i wanted to avoid camlp4, i avoid
> camlp4 when i can anyway.

Well, camlp4 is an official part to ocaml, and will only be used at
compile time, Their is no real reson to avoid it. Furthermore the
stream parser are the lighter

>
> > It is all in the standard ocaml distribution, no need of non-ocaml code,
> > no need of extra libraries. Using that kind of streams you basically get
> > recursive descendent parsers with backtracking inside the same "parser"
> > structure (IIRC).
>
> I found the Stream module, but there is with very very little documentation on
> them, and from what i understand they are not compatible with the camlp4
> stream parser, and there is no syntactic sugar for them.

Mmm ? the stream parser (and not the camlp4 Grammar) have a syntaxic
suggar, given by camlp4 :

moi@vanicat:~$ ocaml
        Objective Caml version 3.09.0

Findlib has been successfully loaded. Additional directives:
  #require "package";;      to load a package
  #list;;                   to list the available packages
  #camlp4o;;                to load camlp4 (standard syntax)
  #camlp4r;;                to load camlp4 (revised syntax)
  #predicates "p,q,...";;   to set these predicates
  Topfind.reset();;         to force that packages will be reloaded
  #thread;;                 to enable threads

# let p = parser [< ''e' >] -> `E;;
Syntax error
#  #camlp4o;;
/usr/lib/ocaml/3.09.0/camlp4: added to search path
/usr/lib/ocaml/3.09.0/camlp4/camlp4o.cma: loaded
        Camlp4 Parsing version 3.09.0

# let p = parser [< ''e' >] -> `E;;
val p : char Stream.t -> [> `E ] = <fun>
#

The documentation can be found in the camlp4 documentation I believe:
http://caml.inria.fr/pub/docs/manual-camlp4/manual003.html



Reply to: