caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Jacques Garrigue <garrigue@math.nagoya-u.ac.jp>
To: effbiae@ivorykite.com
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] some comments on ocaml{lex,yacc} from a novice's POV
Date: Sat, 02 Apr 2005 16:38:51 +0900 (JST)	[thread overview]
Message-ID: <20050402.163851.88994843.garrigue@math.nagoya-u.ac.jp> (raw)
In-Reply-To: <50130.202.164.198.46.1112418604.squirrel@www.ivorykite.com>

From: "Jack Andrews" <effbiae@ivorykite.com>

> this is a little long.  i'm new to ocaml, but like most, have been
> educated in FLs and experimented with and applied functional languages and
> techniques.  python has been the first language i turn to for a few years
> now.
> 
> i need to parse text as a sequence of records (with odd variations). i
> have used ply (python lex-yacc) most recently for parsing and believe it
> to be one of the more elegant mechanisms i've seen. 
> http://systems.cs.uchicago.edu/ply/ply.html
> 
> elegant because there are no lex and yacc input files, but rather the
> tokens and grammar rules are defined in python code -- succinctly!  eg:
> 
> # calclex.py
> import lex
> tokens = ( 'NUMBER', 'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'LPAREN', 'RPAREN',)
> t_PLUS    = r'\+'  # in python, the r prefix to a string literal
> t_MINUS   = r'-'   #  means as-is.  r'\' in python is "\\" in c
> [snip]

Interestingly, your example corresponds exactly to the one in the
ocaml tutorial, where it is solved using stream parsers.
Stream parsers are a bit more involved than just writing yacc rules,
but they give you more control on how to combine rules (you can write
parser combinators.) And they are completely integrated in the
language using camlp4.

Alternatively, you can also use ocamllex/ocamlyacc (a little bit more
overhead, but really easy once you're set up), or use the Scanf module
(if you don't need a real parser.)

By the way, Caml 3.1 had complete yacc integration (15 years ago).
I suppose this was considered too monolithic, but it was very nice to
use in practice.

Jacques Garrigue


  parent reply	other threads:[~2005-04-02  7:39 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-01 11:32 bug in "developing applications with objective caml" (english translation) Jack Andrews
2005-04-01 20:03 ` [Caml-list] " Ken Rose
2005-04-02  5:10   ` some comments on ocaml{lex,yacc} from a novice's POV Jack Andrews
2005-04-02  7:02     ` [Caml-list] " Erik de Castro Lopo
2005-04-02  7:38     ` Jacques Garrigue [this message]
2005-04-03 16:18       ` Parser combinators [was: some comments on ocaml{lex,yacc} from a novice's POV] Alex Baretta
2005-04-04  0:40         ` [Caml-list] Parser combinators Jacques Garrigue
2005-04-05 16:06       ` [Caml-list] some comments on ocaml{lex,yacc} from a novice's POV Oliver Bandel
     [not found]   ` <50130.202.164.198.46.1112418605.squirrel@www.ivorykite.com>
2005-04-04  3:42     ` Jack Andrews
2005-04-04  5:44       ` [Caml-list] " Erik de Castro Lopo
2005-04-04  9:51         ` Jon Harrop
2005-04-05 12:00           ` Geoff Wozniak
2005-04-05 13:49             ` Jon Harrop
2005-04-05 14:26               ` Richard Jones
2005-04-05 16:13                 ` Oliver Bandel
2005-04-06  4:52               ` Geoff Wozniak
2005-04-06  5:12                 ` Kenneth Knowles
2005-04-06  6:15                 ` some comments on ocaml{lex,yacc} from anovice's POV Jack Andrews
2005-04-04 10:29         ` [Caml-list] Re: some comments on ocaml{lex,yacc} from a novice's POV Daan Leijen
2005-04-04 17:39         ` Paul Snively
2005-04-04 18:16           ` skaller
2005-04-04 18:49             ` Paul Snively

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=20050402.163851.88994843.garrigue@math.nagoya-u.ac.jp \
    --to=garrigue@math.nagoya-u.ac.jp \
    --cc=caml-list@yquem.inria.fr \
    --cc=effbiae@ivorykite.com \
    /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).