Have you tried smerl? <a href="http://code.google.com/p/smerl/">http://code.google.com/p/smerl/</a><br>
I used it for something very similar (dynamically generating email sorting functions from a text file containing rules)<br>
<br>
Zsolt<br><br><div class="gmail_quote">On Thu, Jun 16, 2011 at 4:19 PM, Dan Kelley <span dir="ltr"><<a href="mailto:djk121@gmail.com">djk121@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br><br><div class="gmail_quote"><div><div></div><div class="h5">On Thu, Jun 16, 2011 at 4:12 PM, Mihai Balea <span dir="ltr"><<a href="mailto:mihai@hates.ms" target="_blank">mihai@hates.ms</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">


<div><div></div><div><br>
On Jun 16, 2011, at 3:48 PM, Dan Kelley wrote:<br>
<br>
><br>
> Hi,<br>
><br>
> I'm working on a router of sorts.  I'd like to have a config file which specifies how to classify messages, what channels are available, and routing rules based on classifications and channels.<br>
><br>
> When my application starts, I'd like to transform the configuration into a module (let's call it 'router') so I can do someting like 'router:route(Message)'.  Message will be a record that encapsulates a bunch of things about the message, and the returned value will be the channel to which the message should be delivered.  The Message record is reasonably complicated - the top level thing contains several layers of different records.  I also have a large number of macros that I use to extract different fields/subrecords of a top-level Message.<br>



><br>
> When I started looking at how to do this, I quickly found erl_scan, erl_parse, and friends.  I can easily create a module on the fly with these, but everything falls apart when I need to get at the Message record and macro definitions.  Despite the access provided to compiler-ish things by erl_scan, erl_parse and friends, it looks like the only way to get at the preprocessor is to use epp on files.  This is a problem because the code I want to dynamically create needs to use the record definitions and macros from the Message header file.<br>



><br>
> Trying to figure a way around this led me to aleppo, which neatly solved the problem of including the header file, but aleppo doesn't process records.  For a brief and exciting moment, it looked like erl_expand_records might save the day, but it expects forms, and I can't get anything with records through erl_parse:parse_form.<br>



><br>
> Am I missing an easier way to dynamically create code that references macros and records?<br>
><br>
> Thanks,<br>
<br>
</div></div>Why not generate a temporary file and apply compile:file/2 on it?</blockquote><div><br></div></div></div><div>Two reasons:</div><div><br></div><div>First, I can provide better error messages, in the sense that I'll have smaller compile units that I'll trace back to specific parts of the config.</div>


<div><br></div><div>Second,  I'm not sure that I can make that non-ugly.  I had hoped to write my dynamic module to disk using erl_pp so it'd be human-readable.  </div><div><br></div><div>But yeah, that's my fallback position.</div>

<div><br></div><div>Dan</div></div><br>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br>