Trip notes from Israel

Timon Gehr via Digitalmars-d-announce digitalmars-d-announce at puremagic.com
Mon May 22 10:41:30 PDT 2017


On 22.05.2017 17:38, Adam D. Ruppe wrote:
> On Monday, 22 May 2017 at 15:26:26 UTC, Andrei Alexandrescu wrote:
>> Yah, didn't want to overload the article (or the discussion) with the
>> expression/statement distinction. -- Andrei
>
> Yeah, the details might be too much for a general audience (and I
> realize you know this, I'm commenting more for other readers who might
> be interested), but I do think this illustrates an important point for
> anyone who wants to use mixin: it is similar to, but not exactly like
> copy/pasting code into the source.
>
> mixin parses a piece of code, then pastes the *AST node*, not the source
> code, into the tree where the mixin is found. That's why the semicolon
> is required in the statement context - it needs a complete branch that
> actually fits the AST at the moment, not just a string that is pasted
> into the source code at the location.
>
> So similar enough to copy/paste to get someone quickly started playing
> with code generation, but this key difference is needed to really
> understand it.

The grammar has:

expression;

as a statement.

mixin(...)

as an expression

and

mixin(...);

as a statement

Hence,

mixin(...);

is actually grammatically ambiguous and the behaviour of the compiler is 
somewhat arbitrary.

The compiler could easily compensate for the ambiguity during semantic 
and not require the terminating semicolon when parsing the string of a 
mixin statement.


More information about the Digitalmars-d-announce mailing list