On 29/07/2018 2:59 AM, Robert M. Münch wrote:
Hi, I'm seeking for ideas/comments/experiences how to best implement a DSL in D.

What I would like to do is something like this:

     ... my D code ...

     my-dsl {
         ... my multi-line DSL code ...
         trade 100 shares(x) when (time < 20:00) and timingisright()
     }


     ... my D code ...


Some things that circle in my head:
* Can the D parser somehow be missued for a DSL? So I can skip all the generic features for types etc.?

Let's go with no.

* I could use a PEG grammer for parsing the DSL, but this leads to quite some overhead for a tiny DSL.

* For static DSL code I would like to use CTFE to convert it into D code
     * Does this requires a CTFE compatible PEG parser tookit?

Yes.

    * Could I somehow call an external program during compilation which gets the DSL block as input and returns D code?

No. But you can pre-process.

* For dynamic DSL code I think I need to create something like an interpreter     * How can I reference D variables from DSL code? Is there a lookup meachnisam or do I have to create a dictonary?

Registration, but like you said, a giant dictionary.

     * Is it possible to populate such a dictonary via CTFE?

Sort of, it can be registered, but the actual execution of the registration occurs at runtime.



But you're slightly over thinking this. Write an interpreter and a parser. The fact that the parser can work at CTFE is irrelevant and almost a footnote on the page of details ;).

If you want to be clever you could generate D code and mix it in based upon what was parsed. But you'd still want that dictionary.

Reply via email to