Re: [PHP-LANG] Re: [PHP-DEV] Re: [PHP-LANG] Approaching the First Draft [of a language spec]
[email protected] (Sascha Schumann)
| Newsgroups | php.dev,php.lang |
|---|---|
| Message-ID | <[email protected]> |
[..]
> I mean, in my little example, there is additional information in the
> explanation that I don't know how to describe using BNF. I mean, how
> would you describe this:
>
> while(bool) expr1; expr2;
>
> vs.
>
> while(bool): expr1; expr2; endwhile;
>
> In the first case expr2 is not executed within the loop and in the second
> case it is. There probably is some way to indicate in the BNF that the :
> syntax implies statement grouping, but chances are it would be easy for
> someone to misinterpret that and having a little note that goes along with
> the BNF that clarifies this with an example is not just catering to the
> end user, it is also for the compiler weenie. We are all end users when
> it comes down to it and something can never be made too clear.
Well, that is something which can be expressed in a syntactic
rule. I'm not familiar with writing BNF (only reading), so
here is the relevant part of the spec in the php-lang module
(note the difference between statement and statement-list):
iteration-statement:
'while' '(' expression ')' while-statement
while-statement:
statement
':' statement-list 'endwhile' ';'
statement-list:
statement
statement-list statement
There are examples of what you cannot express in those rules.
For example, our syntax has to allow constructs like
$var();
The validness of such a construct depends on the contents of
$var, only to be determined at run-time.
In all cases, semantics definitions have to describe the
conditions of an action, the action itself and all possible
results of that action.
- Sascha