On Mon, 2003-09-29 at 14:10, Pierre Weis wrote: > You may also consider scanf and the format %0c that gives you access > to the current character without incorporating it to the current token > (as Basile said, this is some form of lookahead, limited to 1 > character as is normally the case for streams). > > To give a more concrete example, here is an elementary scanner for > strings, numbers, chars, idents and single character symbols: the > scanneer just decides on the first character (after proper skipping of > spaces) what is the kind of token to read. > > let scan_tok sb = > Scanf.bscanf sb " %0c" (function > | '"' -> > Scanf.bscanf sb "%S" > (fun v -> String v) > | '0' .. '9' | '-' | '+' -> > Scanf.bscanf sb "%f" > (fun v -> Float v) > | '\'' -> > Scanf.bscanf sb "%C" > (fun v -> Char v) > | 'a' .. 'z' | 'A' .. 'Z' -> > Scanf.bscanf sb "%[a..zA..Z0..9]" > (fun v -> Ident v) > | c -> > Scanf.bscanf sb "%1c" > (fun v -> Symbol v));; > val scan_tok : Scanf.Scanning.scanbuf -> tok = I'm trying to write a function that seeks to an arbitrary string delimiter in an input stream. It's not immediately obvious to me how I'd do this with a parser but I'll poke around with it. -- Miles Egan