caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Virgile Prevosto <prevosto@mpi-sb.mpg.de>
To: John Goerzen <jgoerzen@complete.org>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] camlp4 extensions and lexer replacements
Date: Tue, 11 May 2004 10:32:36 +0200	[thread overview]
Message-ID: <20040511103236.2cb98d35@mpiat2314> (raw)
In-Reply-To: <20040510191943.GB14068@excelhustler.com>

Le lundi 10 mai, à 14h19 -0500,
John Goerzen a écrit:

> 
> But #2 is trickier.  pa_o.ml contains this:
> 
>   Grammar.Unsafe.gram_reinit gram (Plexer.gmake ());
> 
> So I can't define my lexer first -- pa_o.ml will just overwrite it.
> Worse, I can't define my lexer second, either.  Plexer relies on the
> (strange, imho) notion of deciding whether something is a LIDENT or
> keyword based on the list of keywords-as-tokens that were encountered
> in a grammar.  But the grammar reinit functions that I would have to
> use to put in my lexer don't preserve that information, so my lexer
> would have no way to differentiate a LIDENT from a keyword.  Also,
> Plexer provides no way to get a list of entries in its internal
> hashtable.
> 

Hello,
I'm not sure wether this will help you or not, but according to camlp4
documentation
(http://caml.inria.fr/camlp4/manual/lib/Grammar.html#TYPEg),
Grammar.tokens provides a way to get the list of the keywords used so
far:
"val tokens : g -> string -> (string * int) list

Given a grammar and a token pattern constructor, returns the list of the
corresponding values currently used in all entries of this grammar. The
integer is the number of times this pattern value is used.

Examples:

* If the associated lexer uses ("", xxx) to represent a keyword (what is
represented by then simple string xxx in an EXTEND statement rule), the
call Grammar.token g "" returns the keywords list."

Note that keywords are not always LIDENT:
~ [502]$ ocaml
        Objective Caml version 3.07+2

# #load "camlp4o.cma";;
	Camlp4 Parsing version 3.07+2

# let x = fst (List.split (Grammar.tokens Pcaml.gram ""));;
val x : string list =
  ["in"; "<>"; "-."; "<="; "struct"; "asr"; "if"; "{<"; "[<"; "<-";
";;";   "lor"; "external"; "sig"; "virtual"; ":>"; ":="; "type"; "::";
"method";   "then"; "**"; "true"; "match"; "parser"; "try"; "for";
"new"; "to"; "do";   "else"; "land"; "and"; "private"; "&&";
"initializer"; "as"; "lazy";   "open"; "false"; "rec"; "~"; "}"; "|";
"end"; "{"; "or"; "constraint";   "of"; "lxor"; ">}"; "`"; "_"; "^";
"]"; "["; "with"; "inherit"; "let";   "!="; "object"; "||"; "include";
"while"; "module"; ">]"; "@"; "?"; ">";   "="; "assert"; "<"; ";"; ":";
"??"; "when"; "exception"; "lsr"; "mutable"   "/"; "[|"; "."; "-"; ",";
"lsl"; "done"; "+"; "begin"; "downto"; "*"; ")"   "|]"; "("; "function";
"'"; "&"; "functor"; "%"; "$"; ">="; "#"; "~-.";   "!"; "~-"; "fun";
"mod"; "class"; ".."; "=="; "->"; "val"]

-- 
E tutto per oggi, a la prossima volta
Virgile

-------------------
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:[~2004-05-11  8:33 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-05-10 19:19 John Goerzen
2004-05-11  8:32 ` Virgile Prevosto [this message]

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=20040511103236.2cb98d35@mpiat2314 \
    --to=prevosto@mpi-sb.mpg.de \
    --cc=caml-list@inria.fr \
    --cc=jgoerzen@complete.org \
    /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).