You can sneak some ideas from C-style syntax disguised as Basic for this 'elseif' discussion.
As in C, a statement can be either a single statement (ignore the fact that I used the word in it's own definition), or a block of multiple statements. Then, an if statement only takes a single statement after it, and that statement may in turn be a block of multiple statements. The same can be said for 'else', so the 'if' in 'else if' is considered a single statement (which contains in itself other statements).
So, I would propose syntax like this: a single statement after an if would look like this:
if <condition> then <single statement>
i.e..
if a > b then DoSomething()
A single statement in an if statement just follows the 'then' on the same line.
To make it a block of multiple statements, it would look like this:
if <condition> then
<statement>
...
endif
i.e.
if a > b then
DoSomething()
DoSomethingElse()
endif
And the same applies to 'else'.
So 'elseif' would now look like this:
if <condition> then
<statement>
...
else if <condition> then // notice that the 'if' is on the same line as the 'else', so the whole 'if' is treated as one statement
<statement>
...
else
<statement>
...
endif
which is internally treated like this, at the most abstract level:
if <condition> then <statement> else <statement*>
where
statement* = if <condition> then <statement^>
where
statement^ = else <statement>
Gettit?
"everyone forgets a semi-colon sometimes." - Phaelax