On Friday, 26 May 2017 at 01:23:59 UTC, Timon Gehr wrote:
On 25.05.2017 20:57, MysticZach wrote:
struct body {}
interface I {
int foo(int i)
in { assert(i); }
body bar();
}
The ambiguity is fixable by modifying the parser to look ahead
after `body` for `{`. Since virtual interface functions are
not even allowed to have bodies, if it finds `{`, then `body`
should be interpreted as a keyword, and an error issued. In
all other cases `body` should be interpreted as an identifier.
This is not a hard problem, but it is indeed a semantic
ambiguity, so it bears mentioning.
There is no ambiguity, because only one valid interpretation
exists.
Well the parser needs to be aware of `body` here both as a
keyword and as an identifier, and to use context to determine
which one it is. So to me, that counts as a semantic ambiguity,
one that is resolved trivially, by a single additional token.
It doesn't seem like it lives up to a more generalized fear of
having contextual keywords, unless it's like guy
https://www.youtube.com/watch?v=tgj3nZWtOfA