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