English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] start conditions in ocamllex
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-02-25 (19:23)
From: Kenneth Knowles <kknowles@u...>
Subject: Re: [Caml-list] start conditions in ocamllex
> > Has anyone thought of implementing start conditions for ocamllex?

> Can't you get the same effect with multiple entrypoints? Though this syntax
> is probably cleaner.

I disagree; I think different entry points are cleaner.  In some recent release
they added the ability to pass your own parameter to the rules, and so I
maintain state by passing a reference to the state.  I don't think the below
code is thread safe, but it could easily be made so by keeping the state ref
external to the entire lexer:

type state_t = StartCondition1 | StartCondition2

rule entrypoint1 state_ref = parse
	'a' { state_ref := StartCondition2; A_TOKEN }

and entrypoint2 state_ref = parse
	'a' { state_ref := StartCondition1; B_TOKEN }

let next_token start_start =
	let state_ref = ref start_state in
	(fun lexbuf -> match !state_ref with
		| StartCondition1 -> entrypoint1 state_ref lexbuf
		| StartCondition2 -> entrypoint2 state_ref lexbuf

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