On Tue, Jan 24, 2012 at 6:54 AM, Christopher Brown
<cm...@st-andrews.ac.uk> wrote:
> Hi Everyone,
>
> Thanks for everyone's kind responses: very helpful so far!
>
> I fully appreciate and understand how difficult writing a C++ parser is. 
> However I may need one for our new Paraphrase project, where I may be 
> targeting C++ for writing a refactoring tool. Obviously I don't want to start 
> writing one myself, hence I was asking if anyone new about an already 
> existing implementation.
>
> Rose looks interesting, I'll check that out, thanks!

I did some more digging after sending my email.  I didn't learn about
GLR parser when I was in school, but that seems to be what the cool
compilers use these days.  Then I discovered that Happy supports GLR,
that is happy!

Next I found that GLR supposedly makes C++ parsing much easier than
LALR, "The reason I wrote Elkhound is to be able to write a C++
parser. The parser is called Elsa, and is included in the distribution
below."  The elsa documentation should give you a flavor for what
needs to be done when making sense of C++:
http://scottmcpeak.com/elkhound/sources/elsa/index.html

NB: I don't think it's been seriously worked on since 2005 so I assume
it doesn't match the latest C++ spec.

The grammar that elsa parses is here, one warning is that it doesn't
reject all invalid programs (eg., it errs on the side of accepting too
much): http://scottmcpeak.com/elkhound/sources/elsa/cc.gr

I think the path of least resistance is pure rose without the haskell
support.  Having said that, I think the most fun direction would be
converting the elsa grammar to happy.  It's just that you'll have a
lot of work (read: testing, debugging, performance tuning, and then
adding vendor features) to do.  One side benefit is that you'll know
much more about the intricacies of C++ when you're done than if you
use someone else's parser.

Jason

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to