Third iteration of QMake parser, looking for a parser generator
Andreas Pakulat
apaku at gmx.de
Tue Jul 3 08:35:40 UTC 2007
On 02.07.07 21:48:08, Matt Rogers wrote:
> On Monday 02 July 2007 20:35, Andreas Pakulat wrote:
> > after trying to fix two bugs found in KDev3's qmake parser in the
> > KDevelop4 version I come to the conclusion that its again needed to
> > rewrite it. I wanted to do that anyway because I don't see a way to
> > properly support the writeBack() methods, i.e. in this new version the
> > parser won't store stuff like whitespace, comments and other things that
> > are not important to understand the files. This will also make parsing
> > easier.
> >
> > So much for the prologue, now for the question: Which parser generator
> > to use. Unfortunately the bison/flex duo is a real bitch when trying to
> > make them produce C++ classes (so you don't have global variables that
> > influence the parsing of consecutive files). So I've looked around a bit
> > for alternatives and here's my list:
> >
> > bison/flex
> > + works out of the box without external dependecies
> > (FlexLexer.h is included in qmake/parser)
> > - no good C++ support, global function needed for the connection
> >
> > bisonc++/flex
> > + similar to above, but the interfacing between flex and bisonc++ is
> > better
> > - Bug in current version wrt. namespaces and whats more important: the
> > generated code needs to be edited afterwards, so its impossible to
> > generate during build, generating is always a two-step process:
> > generate+copy only the implementation and token-table to the srcdir
> >
> > antlr
> > + clean C++ classes for lexer and parser and easy grammar (easier than
> > bison, IMHO)
> > - dependecy on a library at least during compile time, uses a
> > statically linked library, not sure how that works out on win32
> >
> > coco/R
> > + Clean C++ code, no need for a library
> > - LL(1), not sure if thats enough for qmake's syntax
> >
> > spirit/boost
> > + completely C++, relatively easy syntax (although different from
> > anything else
> > - might require boost-regex library for regexp parsing and might
> > increase binary size due to templates
> >
> > Thats what I could find. If anybody else knows a good parser/lexer
> > generator that creates C++ code please share your information.
> >
> > I'm going to give coco/R a more thorough test in the next days, but in
> > the meantime I welcome any comments.
> >
> > Andreas
>
> You left out the kdevelop parser-generator. What's wrong with using that one?
If you look at what local time it was when I wrote it you know why I
left it out :) (Simply forgot). So here it is:
kdev-pg/flex:
+ A dependecy that is introduced anyway when one of the language
plugins returns into kdevelop, good C++ code for the parser,
ok interfacing with a flex-generated C++ class
- Need to write an AST-visitor to produce a usable AST as semantic
actions are completely lacking in this one.
Andreas
--
Someone whom you reject today, will reject you tomorrow.
More information about the KDevelop-devel
mailing list