| > > http://gcc.gnu.org/gcc-4.1/changes.html
| > > 
| > > New Languages and Language specific improvements
| > > C and Objective-C
| > > 
| > >     * The old Bison-based C and Objective-C parser has been replaced
| > >  by a new, faster hand-written recursive-descent parser.
| > 
| > Hahahahaha, WRONG!!!!!!
| > It's one historical error of many years of stupid engineers, developers,
| > programmers and boss!!!!!
|
| OK, we are all stupid, and you think that you are smart.

It was a nice JOKE!!! I'm stupid too ;D

| > "Hand-written recursive-descent parser" == LL(k)
| > however, people does it as LL(1).
| > 
| > The grammar of Pascal language can be LL(1), but the grammar of
| > C, C++ and Objective-C together won't can be LL(1).
| 
| But yet gcc 3.4 has a hand-written recursive descent parser for C++.  How
| can this be?  The answer, of course, is that it is not LL(1).

OK.

| > However, they together can be LALR(1) (or impossible in worst-case) from
| > Yacc/Bison.
|
| Make that "impossible".  C++ is not LALR(1), and in fact it requires
| unbounded lookahead.  Back when we had a Bison parser for C++, it was
| made to work by putting another pass between the lexer and the parser to
| look ahead far enough to disambiguate some of the nasty cases.  However,
| there were many corners of the language that it could not parse correctly.
| That's why we replaced it.

Do you demonstrate that "C++ is not LALR(1)"?

| > Writing Hand-written recursive-descent parser miss-cleans the source code
| > and goes hardfully to maintain it!!!
| 
| Not if you know how to write one correctly.

However, they are many KLOCs in .c compared to few KLOCs in .y
(glossary: KLOCs = Kilo Lines of Code)

| > The best option is a clean grammar in Yacc/Bison!.
| 
| GCC had such parsers for over a decade, and yet they are being replaced.
| 
| Bison remains a good solution in many cases, especially for languages
| specifically designed to be easy to parse with an LALR parser (that is,
| languages that don't look like C).

Why don't we develop a "LR(k) / k small" functions-written parser for this
complex grammar?

Reply via email to