caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alain Frisch <frisch@clipper.ens.fr>
To: Lakshminarayanan R <ln@cs.colostate.edu>
Cc: <caml-list@inria.fr>
Subject: Re: [Caml-list] Looking for parser + ast generator in OCAML
Date: Mon, 18 Feb 2002 21:49:06 +0100 (MET)	[thread overview]
Message-ID: <Pine.GSO.4.33.0202182132550.26369-100000@clipper.ens.fr> (raw)
In-Reply-To: <Pine.GSO.4.20.0202181250270.2060-100000@scarlatti.cs.colostate.edu>

On Mon, 18 Feb 2002, Lakshminarayanan R wrote:

> I am wondering what would be the fastest and robust way to
> implement a parser in ocaml for our language. I am looking
> for parser generators (I found ocamlyacc, are there any
> others?).

Camlp4 (http://caml.inria.fr/camlp4) is another option for parsing. I
rewrote the ocamlyacc parser for my CDuce language in camlp4; this gave
better parsing error messages. The drawback is that camlp4 does not signal
"conflicts" in the parser, but its parsing technology is simple enough to
detect conflicts by hand (globally, I feel more confident in the new
parser; I can predict easily what I break when I add or modify a rule).
Camlp4 parsers are also probably somewhat slowest, but who cares ?  I feel
Camp4 parsers esthetically superior: you don't have to
count the tokens to produce (and read) the correct $1, $2, $3; precedence
levels appear clearly; etc ...


> I am also looking for tools that can automatically
> generate data structures to hold the Abstract Syntax Tree
> and also tools that can generate functions that can be used
> to traverse this AST. Basically I want tools that can take a
> grammar spec. and generate a parser, ast, and tree traversal
> functions, automatically.

I second that, altough I do not see clearly what the tool should be.
Basically, I would like to give the same abstract syntax as in papers,
that is without parentheses, with overloading of symbols between several
syntactical categories, etc ... and let the tool inform me, maybe
interactively, when ambiguities have to be resolved, by showing "typical"
ambiguous case and suggesting solutions (precedence, associativity,
parentheses, ...). An automatically generated pretty-printer associated to
the grammar would be great too.

> I would highly appreciate any pointers to related tools.
>
> A more general question: Is there some kind of Compiler
> Development Kit (or set of tools) in Ocaml?

I'm not aware of such a thing, but there are many compilers written in
OCaml with available source code (OCaml itself for instance).


-- Alain

-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  reply	other threads:[~2002-02-18 20:49 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-02-18 19:55 Lakshminarayanan R
2002-02-18 20:49 ` Alain Frisch [this message]
2002-02-18 21:40   ` Remi VANICAT

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=Pine.GSO.4.33.0202182132550.26369-100000@clipper.ens.fr \
    --to=frisch@clipper.ens.fr \
    --cc=caml-list@inria.fr \
    --cc=ln@cs.colostate.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;
as well as URLs for NNTP newsgroup(s).