<br><br><div class="gmail_quote">On Thu, Aug 19, 2010 at 8:05 PM, Michael Litchard <span dir="ltr">&lt;<a href="mailto:michael@schmong.org">michael@schmong.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
I&#39;d like the community to give me feedback on the difficulty level of<br>
implementing an awk interpreter. What language features would be<br>
required? Specifically I&#39;m hoping that TH is not necessary because I&#39;m<br>
nowhere near that skill level.<br></blockquote><div><br></div><div>I&#39;d love to have portable pure haskell implementations of the traditional unix tools.  If it were done well, it would allow you to &#39;cabal install&#39; yourself into a usable dev environment on windows :)  I&#39;d much rather do that than deal with cygwin/mingw.</div>
<div><br></div><div>Someone (was it Stephen Hicks?) was writing (or finished writing?) an sh parser and I got really excited for the same reason.  It would be a cool project, but I&#39;m not sure I can justify to myself spending my spare cycles on it.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
<br>
An outline of a possible approach would be appreciated. I am using<br>
<a href="http://www.math.utah.edu/docs/info/gawk_toc.html" target="_blank">http://www.math.utah.edu/docs/info/gawk_toc.html</a><br>
as a guide to the language description.<br></blockquote><div><br></div><div>I think this is a good opportunity for you to learn about monad transformers.  To that end, I think you will like this paper (quite easy for beginners to pick up):</div>
<div><a href="http://www.grabmueller.de/martin/www/pub/Transformers.en.html">http://www.grabmueller.de/martin/www/pub/Transformers.en.html</a></div><div><br></div><div>At least, that&#39;s how I first learned about them and I though it was easy to read at the time :)</div>
<div><br></div><div>You might also want to read (and try) some of the tutorials that focus on creating interpreters just to sort of get some practice in that area.  I haven&#39;t read it, but I&#39;ve heard good things about this one:</div>
<div><a href="http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours">http://en.wikibooks.org/wiki/Write_Yourself_a_Scheme_in_48_Hours</a></div><div><br></div><div>You might also focus on the &#39;core&#39; of awk.  Think about, what is the minimal language and start from there.  Grow your implementation adding features bit by bit.  It&#39;s also a good opportunity to do testing.  You have a reference implementation and so you can write lots of tests for each feature as you add them.</div>
<div><br></div><div>I hope that helps,</div><div>Jason</div></div>