Third iteration of QMake parser, looking for a parser generator
Andreas Pakulat
apaku at gmx.de
Tue Jul 3 01:35:59 UTC 2007
Hi,
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 have the capacity to learn from mistakes. You'll learn a lot today.
More information about the KDevelop-devel
mailing list