TODO list for kdev-pg
---------------------

See also: http://techbase.kde.org/Development/KDevelop-PG-Qt_Development_Guide#Ideas_for_the_future

- Inside kdev-pg, seperate the parser ast from the struct member ast.
  The latter should be far easier to access from code generating visitors,
  so it would be awesome to have one.

- Provide a FAIL("errormessage") macro which exits the currently running rule
  or try/* block with an error. That will add many #define/#undef directives
  to the generated code, but makes the grammar author's life more bearable.

- Make a distinction between try/* blocks that are expected fail and ones that
  should not fail. For example, if "try/recover(#statement=block_statement)*"
  fails, then we want an error message, and parsing should continue anyways.
  On the other hand, when we have something like
  "try/rollback(cast_expression=cast_expression)" we don't know if there's
  really a cast_expression supposed to come up, it's just trial-and-error.
  In case it's not a cast_expression, we don't want an error here.

- Introduce abstract rules, like
  "@abstract modifier [ member variable mod: unsigned int; ] ;;"
  and also provide an opportunity to assign default values to those members.
  Derived rules would then inherit from the abstract rule, like
  "(...rule...) -> accessor_modifier is a modifier ;;"
  Make sure that every member of the abstract rule is either declared again
  in the derived rule's variable section, or directly assigned in its body.
  So that grammar authors don't forget to have a valid value for inherited
  member variables.
  (I think this one's pretty important, as it has the potential to vastly
   simplify and overall improve the generated ast. So that the same structures
   in differently parsed variations still return the same node struct.)

- Introduce rule proxies in order to improve the generated ast, like
  "value=variable_declaration SEMICOLON -> variable_declaration_statement is a variable_declaration proxy ;;"
  which cuts down a bit on the number of unnecessarily generated nodes.
  In this case, there would be no variable_declaration_statement node,
  instead it's just passing on the variable_declaration node to its
  actual parsing function, without allocating a node of its own.

- Inside kdev-pg, make symbols point to rules, not the other way round.
  That would make FIRST/FOLLOW set inheritance easier than it is now,
  and allows for individual properties of symbols.

- Proper LL(k) support? Roberto, where are you?

- Make it easier to transform the AST with manually written code.

- Evaluate if it makes sense to move kdev-pg from its yacc grammar to a
  kdev-pg grammar, including the implied effects on the then autogenerated
  visitor class and its subclasses. (The struct member ast would still need
  to be generated manually, as there is no input file for it.)
