Subject: lone ';' in Sieve

From: David Roxe <[email-masked]>
Date: Thu, 15 Feb 2001 17:21:57 -0500

Hi,

I sent a note to Tim Showalter regarding the use of a lone
';' as a no-op.  Apparently, RFC 3028 doesn't allow this.
He suggested that I subscribe here and raise the issue for
general discussion.  I have not previously participated
on IETF mailing lists, even as a lurker.

Many languages allow a lone ';' for completeness and convenience.
As I think of it, it seems to me that several languages allow
lone blocks (i.e. "{...}" outside of "if" and similar
statements) as well.

So, I think things could be fixed by changing the definition of
"command" on page 31 to use "[]" as follows:

=====
command = [ identifier arguments ] ( ";" / block )
=====

I do not have a strong background in languages, and am not
an ABNF adept, so I will probably limit my involvement in
whatever discussion ensues.

Thanks!

---

From: "Nigel Swinson" <[email-masked]>
Date: Fri, 16 Feb 2001 11:26:24 -0000

> on IETF mailing lists, even as a lurker.

I think that the ";" is meant to say "end of command".  If there is no command before it and it's to be legal, then it's saying "end of command that we didn't find".  A bit strange...  

Were we to allow a lone ';', then it becomes a kind of conditional whitespace.  It serves no functional purpose in the language, and just really adds clutter to the script.  Users are probably going to spend most of their time forgetting to put the ';' in rather than putting too many in :o)

Although I don't feel so strongly, I think it better and easier if we don't allow it.  At worst all it means to the user is the mild inconvenience of a compile time error.

> lone blocks (i.e. "{...}" outside of "if" and similar

I think other languages allow {...} without if/for/while/elsif/etc to allow the principles of "scope".  We don't have variables in the Sieve language, so we don't have a concept of scope.  That's probably why it's not available in the Sieve language.

On a similar issue we do allow "if true {}", but that's different :o)

Nigel