caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] syntax question -- end of pattern-matching
@ 2002-07-18 19:27 John Carr
  2002-07-19  8:33 ` Daniel de Rauglaudre
  2002-07-19 12:00 ` Xavier Leroy
  0 siblings, 2 replies; 3+ messages in thread
From: John Carr @ 2002-07-18 19:27 UTC (permalink / raw)
  To: caml-list


If I write a match directly within another match, or a try ... with
expression in a sequence of expressions, it is often necessary to
use two semicolons separated by whitespace after the pattern matching.

For example,

	let f x = try x + 1 with Invalid_argument _ -> 42 ; "hello"

is parsed as

	let f x = try x + 1 with Invalid_argument _ -> (42 ; "hello")

(and causes a type error), but if I add a second semicolon

	let f x = try x + 1 with Invalid_argument _ -> 42 ; ; "hello"

is parsed as

	let f x = (try x + 1 with Invalid_argument _ -> 42;) ; "hello"


I am unable to figure out from the grammar why this is so.

If the section 6.7 of the manual is correct, an expression may not be
empty so two semicolons separated by whitespace should not be allowed.
Thus the second form of the definition should cause a syntax error.
If an empty expression were allowed, the second form would be parsed
like the first, with "hello" as part of the expression sequence in the
"with" clause.

Is it possible to deduce ocaml's behavior from the grammar?


    --John Carr (jfc@mit.edu)
-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] syntax question -- end of pattern-matching
  2002-07-18 19:27 [Caml-list] syntax question -- end of pattern-matching John Carr
@ 2002-07-19  8:33 ` Daniel de Rauglaudre
  2002-07-19 12:00 ` Xavier Leroy
  1 sibling, 0 replies; 3+ messages in thread
From: Daniel de Rauglaudre @ 2002-07-19  8:33 UTC (permalink / raw)
  To: caml-list

Hi,

On Thu, Jul 18, 2002 at 03:27:16PM -0400, John Carr wrote:

> 	let f x = try x + 1 with Invalid_argument _ -> 42 ; ; "hello"
> is parsed as
> 	let f x = (try x + 1 with Invalid_argument _ -> 42;) ; "hello"

IMHO, this behaviour has not been planed: the yacc version (OCamlyacc)
seems to work like that, but the Camlp4 version (camlp4o) interprets
it the other way (as if there were only one semicolon).

I think that you should not use this feature and rather use parentheses
or the begin..end construction.

-- 
Daniel de RAUGLAUDRE
daniel.de_rauglaudre@inria.fr
http://cristal.inria.fr/~ddr/
-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Caml-list] syntax question -- end of pattern-matching
  2002-07-18 19:27 [Caml-list] syntax question -- end of pattern-matching John Carr
  2002-07-19  8:33 ` Daniel de Rauglaudre
@ 2002-07-19 12:00 ` Xavier Leroy
  1 sibling, 0 replies; 3+ messages in thread
From: Xavier Leroy @ 2002-07-19 12:00 UTC (permalink / raw)
  To: John Carr; +Cc: caml-list

> If I write a match directly within another match, or a try ... with
> expression in a sequence of expressions, it is often necessary to
> use two semicolons separated by whitespace after the pattern matching.
> 
> For example,
> 
> 	let f x = try x + 1 with Invalid_argument _ -> 42 ; "hello"
> 
> is parsed as
> 
> 	let f x = try x + 1 with Invalid_argument _ -> (42 ; "hello")
> 
> (and causes a type error), but if I add a second semicolon
> 
> 	let f x = try x + 1 with Invalid_argument _ -> 42 ; ; "hello"
> 
> is parsed as
> 
> 	let f x = (try x + 1 with Invalid_argument _ -> 42;) ; "hello"

Please don't use the "; ;" form: it has never been intended to work,
it's just an unexpected consequence of some other decisions made in
the Yacc grammar.

The proper way to write what you want is

  let f x = (try x + 1 with Invalid_argument _ -> 42) ; "hello"

or

  let f x = begin try x + 1 with Invalid_argument _ -> 42 end; "hello"

- Xavier Leroy
-------------------
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


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-07-19 12:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-07-18 19:27 [Caml-list] syntax question -- end of pattern-matching John Carr
2002-07-19  8:33 ` Daniel de Rauglaudre
2002-07-19 12:00 ` Xavier Leroy

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).