[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: minor lua refman grammar points
- From: Roberto Ierusalimschy <roberto@...>
- Date: Wed, 26 Jan 2011 11:25:28 -0200
> (2) According to 5.2-alpha grammar,
>
> block ::= {stat} [laststat [‘;’]]
> stat ::= ‘;’ | .....
> laststat ::= return [explist] | break
>
> This implies you can have any number of semicolons before or after
> each statement in a block, except for any laststat (i.e. `return` or
> `break`), which can be followed by at most one semicolon. Therefore,
> ";;print();;" is valid, but ";;return;;" is not. Is that intended?
Yes. (See below.)
> Moreover, as ";" is now formally considered a statement (the "empty
> statement") rather than just a statement separator, the comment "The
> return and break statements can only be written as the last statement
> of a block" is no longer entirely correct.
As you said, both "return" and "break" have their own optional
semicolons in the gramar. So, a semicolon in "return;" is not an empty
statement. (It cannot be an empty statement, so the gramar is not
ambiguous.)
-- Roberto