22-11-2006: * added template tuple parameter syntax (I thought it was already part of the grammar, guess I was wrong) * merged TokenInfo with Token class (lexical package) * deleted obselete iftype conditional * removed useless wrappers: TokenizedModule, ParsedModule, Tree, ITree 19-11-2006: * added scope attribute * more refactoring * header semantics [needs testing] 10-11-2006: * reduced parse time by 20% just by allocating ParseRule objects on the stack. 27-10-2006: * added anonymous delegates * added array literals * added foreach_reverse and fixed foreach type list * renamed some elements of TOK enum 26-10-2006: * minor documenation fixes 4-8-2006: * done reading and writing trees to xml files * I patched build (locally) so I removed the pragma( build ) things for renamed imports. 2-8-2006: * code is still unstable (because I didn't test it much lately) * updated lexer to deal with dchars (UTF-32) instead of chars (UTF-8) * a little bit of cleanup for lexical.token_enum * changed the behaviour of Scanner!(T) to return an invalid T instance instead of an empty one when it encounters an out-of-bounds access. I'm not sure how this will turn out, it also needs to be tested. * removed "void" from the Iinitializer rule, we don't lex keywords, and it's parsed as an AssignExpression. * I did a massive search and replace to replace tabs with four spaces. 25-7-2006: * code is not very stable right now, I've been moving stuff around and rebuilding/redesigning/refactoring the parser infrastructure, changes include: * parse rules no longer inherit from ParseNode, instead, they inherit from ParseRule. * ParseRule doesn't inherit or implement anything (except for Object ofcourse) * The parse tree is constructed from ParseNode objects, each node holds the name of its rule. In addition, Teminal objects (Terminal inherits from ParseNode) represent terminal nodes, and they hold the "token" that represents the terminal (not much change here). * The parse tree doesn't have to be of a specific class, it just has to be implement ITree interface, and nodes must implement INode interface. This allows us to save and load trees to files using xml (or any other format) while still being able to deal with them. * Parsing is no longer done in the constructor of the parse rules, and the TokenScanner object is not passed around like crazy anymore; it's now a part of the ParseRule objects. * Previously I was using an associative array as an elegant alternative to huge switch statements in some modules. This pattern was repeated in several modules, now I've refactored it into a class hierarchy. * updated parser to the new function template syntax and import syntax. * there seems to be a new delegate syntax .. I haven't added that yet. version 0.25: * Parser is practically complete * Finished adding all grammar rules * Stress tested * successfully parsed itself, phobos, mango, derelict, harmonia, destress/run, dstress/compile * alot of small bug fixes * lexer is now somewhat unicode-aware, but not fully. Version 0.24: * Added the rest of initialzers * Added more expressions * Improved Declaration/Expression disambiguation * Several bug fixes * Improved lexer: ** Added line numbers to tokens and text scanner ** Added a mapping to convert TOK enums to readable strings. !! now can fully parse the test_bed.d !! Version 0.23: * Added most of the rest of expressions * Added more statements * Added proper xml formatting for strings with special xml characters Version 0.22: * Added for and foreach loops * Added switch, case, default, goto, break and continue statements * Added return statements Version 0.21: * Added attributes * Added conditional compilation constructs, i.e. version, debug, static if, iftype * Added debug and version specifications * Added function contracts * Added static constructors and static destructors * Added static asserts Version 0.20: * Added classes, interfaces, structs, unions, and enums Version 0.19: * Added a mechanism to dis-ambiguate declaration statements from expression statements * Extended Statement to include declarations and labels Version 0.18: * Extended statements to include if-else, while, and do-while statements. Version 0.17: * Extended the array type to account for assosiative arrays * Added template instantiation syntax Version 0.16: * Added delcarator identifier list (to declare multiple variables at once) Version 0.15: * Added declarator initialization Version 0.14: * Added simple expressions * Statements can now hold expressions * fixed a minor xml output bug Version 0.13: * Added function and delegate recognition as type suffixes * Fixed parameters Version 0.12: * Added c-style type suffixes Version 0.11: * Added Typesuffixes Version 0.10: * First version * supports a minimum subset of the D langauge ---------- Note: Date entries are like this: day-month-year