Nice Inline Syntax for DSLs
Russell Lewis
webmaster at villagersonline.com
Sat Feb 17 06:51:05 PST 2007
Knud Soerensen wrote:
> On Fri, 16 Feb 2007 16:35:46 -0700, Russell Lewis wrote:
>
>> Originally posted in digitalmars.d.announce. I reposted here when I
>> realized my mistake.
>>
>> We have been talking about using string imports and code mixins and
>> their applicability for domain-specific languages. But the current
>> design requires either that we wrap the whole sub-language as a string,
>> or we store it in another file so that we can use string imports. But
>> what if we allowed there to be some simple syntax which allowed us to
>> say, "Here at the top is D code; below is the DSL." How about something
>> like:
>>
>> import my_dsl_compiler;
>> mixin(MyDSLCompiler!(import_rest_of_this_file));
>> FIRST_LINE_OF_MY_DSL
>>
>> or
>>
>> import my_dsl_compiler;
>> int main(char[][] argv) {
>> // this line resolves to a lot of variable declarations
>> // and functions, including a my_dsl_main()
>> mixin MyDSLCompiler!(import_rest_of_this_file));
>> return my_dsl_main(argv);
>> }
>> FIRST_LINE_OF_MY_DSL
>>
>> Sort of the idea is that whenever the compiler hits a line that includes
>> some special keyword (in the above example, it is
>> import_rest_of_this_file), it keeps on to the end of the current
>> declaration, treating it as D code. The rest is assumed to be string
>> data which is imported into the D code above.
>>
>> Think of it like a shebang line in a script, which documents how the
>> rest of the code is to be handled.
>>
>> Russ
>
> Well, we already have asm as a dsl.
> Why not use a similar syntax like:
>
> dslname
> {
> ...
> }
>
> We just need a way to tell the compiler which passer to use for dslname.
Sure, you can already do that...but with double quotes. The reason that
I think that double quotes, or brackets, are unsatisfying is because
then those tokens become unusable inside the DSL. I'm looking for a
format where the DSL can use any grammar whatsoever, without any need
for escape sequences or workarounds.
More information about the Digitalmars-d
mailing list