<div>You might want to consider elixir for this simple task. Since it compiles into beam you can use generated modules from erlang. </div><div>If you really want erlang code you could extract generated erlang from compiled beam (you need debug_info for that though).</div>
<div>I know that it's not elixir mailing list so I'm apologize for providing a solution in this language. However it might save a lot of effort compared to writing DSL in erlang.</div>
<br><div>Your dsl code might look like (for complete code see <a href="https://gist.github.com/khia/4741045" target="_blank">https://gist.github.com/khia/4741045</a>):</div><div><div> defmacro action(match, [do: body]) do</div>
<div>     quote do</div>
<div>        def handle_info(unquote(match), state) do</div><div>           unquote(body)</div><div>          {:ok, state}</div><div>       end</div><div>    end</div><div> end</div><div> defmacro createhandler(name, [do: body]) do</div>

<div>     quote do</div><div>        defmodule unquote(name) do</div><div>            unquote(body)</div><div>        end</div><div>     end</div><div> end</div></div><div><br></div><div>Having that you can write your definition files using your own macro (action and createhandler) as:</div>

<div><div><div><div>createhandler TestHandler do</div><div>   action {:x, x}, do: IO.puts "x: #{inspect x}"</div><div>   action {:y, y, seed} do</div><div>      # example of calling erlang modules</div><div>      :random.seed(seed)</div>

<div>      value = :random.uniform(y)</div><div>      IO.puts "random.uniform(${y}) -> #{value} "</div><div>    end</div><div>end</div></div></div></div><div><br></div><div>If your actions can be a single expression you can go further and define macro for ::: (or something else) and then you might be able turn it into (WARNING pseudo code)</div>

<div><div><div>createhandler TestHandler do</div><div>   {:x, x} ::: IO.puts("x: #{inspect x}")</div><div>   {:y, y} ::: IO.puts("random.uniform(${y}) -> #{value} ")</div><div>end</div></div><div><br>

</div><div>Best regards,</div><div>ILYA</div><div><div><br></div><div>> I'm am interested in creating an external DSL with Erlang and what are</div><div>> the steps involved. So very basically I want to convert some English</div>

<div>> like language into running erlang code. My goal is to build up a full</div>
<div>> erlang source file relative to the dsl file I have as input. I don't</div><div>> necessarily need to print out the source file to the file system,</div><div>> holding it in memory is sufficient and allowing its execution.</div>


<div><br></div><div>> Sample DSL syntax; {createhandler, "TestHandler", {handles, [ {x,</div><div>> {action, printToScreen}}, {y, {action, writeToStorage}} ]} }</div><div><br></div><div>> So from above I want to create a gen_event handler with a handle_event</div>


<div>> function which pattern matches on 'x' and 'y' and performs the actions</div><div>> defined. I have used this to just show what I would like to do, what I'm</div><div>> interested in is the steps and approaches to doing this.</div>


</div>
</div>