fix argument order and offset
[kdevelop:kdevelop-pg-qt.git] / TODO
1 TODO list for kdev-pg
2 ---------------------
3
4 See also: http://techbase.kde.org/Development/KDevelop-PG-Qt_Development_Guide#Ideas_for_the_future
5
6 - Inside kdev-pg, seperate the parser ast from the struct member ast.
7   The latter should be far easier to access from code generating visitors,
8   so it would be awesome to have one.
9
10 - Provide a FAIL("errormessage") macro which exits the currently running rule
11   or try/* block with an error. That will add many #define/#undef directives
12   to the generated code, but makes the grammar author's life more bearable.
13
14 - Make a distinction between try/* blocks that are expected fail and ones that
15   should not fail. For example, if "try/recover(#statement=block_statement)*"
16   fails, then we want an error message, and parsing should continue anyways.
17   On the other hand, when we have something like
18   "try/rollback(cast_expression=cast_expression)" we don't know if there's
19   really a cast_expression supposed to come up, it's just trial-and-error.
20   In case it's not a cast_expression, we don't want an error here.
21
22 - Introduce abstract rules, like
23   "@abstract modifier [ member variable mod: unsigned int; ] ;;"
24   and also provide an opportunity to assign default values to those members.
25   Derived rules would then inherit from the abstract rule, like
26   "(...rule...) -> accessor_modifier is a modifier ;;"
27   Make sure that every member of the abstract rule is either declared again
28   in the derived rule's variable section, or directly assigned in its body.
29   So that grammar authors don't forget to have a valid value for inherited
30   member variables.
31   (I think this one's pretty important, as it has the potential to vastly
32    simplify and overall improve the generated ast. So that the same structures
33    in differently parsed variations still return the same node struct.)
34
35 - Introduce rule proxies in order to improve the generated ast, like
36   "value=variable_declaration SEMICOLON -> variable_declaration_statement is a variable_declaration proxy ;;"
37   which cuts down a bit on the number of unnecessarily generated nodes.
38   In this case, there would be no variable_declaration_statement node,
39   instead it's just passing on the variable_declaration node to its
40   actual parsing function, without allocating a node of its own.
41
42 - Inside kdev-pg, make symbols point to rules, not the other way round.
43   That would make FIRST/FOLLOW set inheritance easier than it is now,
44   and allows for individual properties of symbols.
45
46 - Proper LL(k) support? Roberto, where are you?
47
48 - Make it easier to transform the AST with manually written code.
49
50 - Evaluate if it makes sense to move kdev-pg from its yacc grammar to a
51   kdev-pg grammar, including the implied effects on the then autogenerated
52   visitor class and its subclasses. (The struct member ast would still need
53   to be generated manually, as there is no input file for it.)