ChangeLog.txt - Change log of UKernel. 061501: Benjamin Han Created. 062101: Benjamin Han Version 1.6. 062501: Benjamin Han Version 1.7. 070101: Benjamin Han Version 1.75. 070501: Benjamin Han Version 1.76. 071301: Benjamin Han Version 1.78. 071701: Benjamin Han Version 1.79. 081001: Benjamin Han Version 1.80. 092801: Benjamin Han Version 1.82. 120601: Benjamin Han Version 1.83. 120601: Version 1.83: 1. Revised grammar modules to use the generic CFG structure in Toolbox - the new grammar modules uses a trie (prefix tree) to store RHSs, so it's faster and consuming less memory. It also supports prefix search and rules removal - it should be much friendlier for parsing now. 2. Introducing namespace UKernel. 3. Bugfix: UShell crashed when a kernel command misses LHS or RHS. 4. Updates of the manual. 093001: 1. Minor revisions of the manual. 2. Minor fixes of "make tar". 092801: Version 1.82: 1. Full support of "penetrating" paths in all FS operations (penetrating paths are paths leading into complex FSs) - both in LHS and RHS. 2. Major revision of grammar.* to make it possible to do a rule-lookup by the rule RHS - grammar API is changed. 3. Revised the implementation of constraint operator "=c" - now it has the same behavior as that in the 1988 GenKit (which means it's a destructive operator again). The symbol code for the operator is Symbol::OP_CONSTRAIN (Symbol::OP_EQUAL is removed). 4. Added two new equation operators: a). testing operator "=t" (Symbol::OP_TEST) which is essentially a non-destructive pseudo-unification operator, and b). isomorphism operator "=i" (Symbol::OP_ISO) which tests isomorphism between two FSs. 5. Added C++ operator==() for both Value and FStruc (isomorphism tests). 6. Added support of printing tracing info while executing equation blocks (EBlock::setTracing() etc.). 7. Bug fixes: correctly compact values and FSs (previous code ignored possible embeddings of *OR* under *MULTIPLE* or vice versa); UShell now can show help messages on =c, =t and =i. 8. Augmented testing programs valTst.cpp and fsTst.cpp for all new stuff. 9. Updated the UKernel manual to reflect the changes; also fixed some inconsistent/ambiguous part. 090501: 1. Fixed a bug in EBlockOr::run(): now it reports 'true' correctly; revised EBlockOr::run() and EBlockEor::run() and they now run more efficiently by ensuring that copying FSs only happens when absolutely necessary. 2. Revised FSregisters::copy() (the 1st form) to copy/remove only the additional/redundant FSs - faster. 090301: 1. Revised to compile under g++ version 3.0 with -Wall -pedantic. 2. Minor revisions to work with the latest Toolbox (tree algorithm class name changes). 082001: 1. Fixed the init ordering problem of the static TokenDict<> inside TokenID<>/ Symbol: now the static TokenDict<> is in a method - see tokDict.hpp and tokID.hpp in Toolbox. 2. Revised testing programs to compile with less memory. 3. Revised Makefile so you have to "make bin" or "make ush" to build UShell. 081701: 1. Changed the string argument in Grammar::Grammar() and Grammar::setStart() to a Symbol argument (so the direct manipulations of strings are restricted to symbol.*). 2. Removed the old documents Operators.txt, Guidlines.txt, TO-DO.txt, and Diff-GenKit.txt. Added a complete manual doc/uKernelManual.ps. 3. Made the kernel commands in UShell case-sensitive. 4. Split build targets in Makefile into 2 sets: the default object-only target, and the testing programs target, so now you can build only the object files. 5. Building using optimizations. 081001: Version 1.80: 1. Updated to work with Toolbox v1.3. 2. Changed RHS::lexical flag to RHS::charLevel in grammar.hpp. 3. Several bug fixes about using operator-- on various data types. 4. Changed all .cc files to .cpp files, and all .h files to .hpp files; also changed the other related files for this. 071701: Version 1.79: 1. Complete support of interactions between *OR*, *MULTIPLE*, and atomic FSs. 2. Revised the behavior of unifying two *OR* values. 3. Code cleanup and minor bug fixes. 4. Updated testing programs and documentation. 071301: Version 1.78: 1. Again revised the behaviors of interactions between atomic/complex values/FSs to match those in the 1988 GenKit (esp. *MULTIPLE*). Note however the interactions between *OR* FSs with the other kinds of FSs (*MULTIPLE* and atomic) have yet been fully implemented. 2. Removed equation type 5-10 and revised the equation type 4 to be the interface to the Extension Functions - a kind of callback mechanism to allow easier system extension via adding more types of equations. 3. Revised the lexicon facility - no more next-lex but much more flexible get-lex/get-lex-fs equations (optional arguments are allowed, and if wanted all matching entries can be returned in a big *OR* FS). 4. Updated all documentation. 070501: Version 1.76: 1. Correctly model the execution of *OR* equation blocks - a combined *OR* FS will be produced if the execution is successful, and the resulting FS will have no duplicate daughters. Note however the interactions between *OR* FSs with the other kinds of FSs (*MULTIPLE* and atomic) have yet been fully implemented. 2. Documented the interactions between complex (*NOT*, *OR* and *MULTIPLE*) and atomic values in Operators.txt. 3. Added document Guidelines.txt for efficiency suggestions to grammar writers. 070101: Version 1.75: 1. Finished complete review of value.* code - fixed several bugs and revised some definitions of interactions between complex values (will be documented in the next version). 2. Changed the way to address FSs in the equations. Now when initializing equation blocks instead of passing FStruc & you need to pass the index of the FS; e.g., for equation (x1 <= x0) the corresponding constructor call is EBlockMain(1,lPath,0,rPath,Symbol::OP_ASSIGN) with both lPath and rPath cleared. See equTst.cpp and graTstSub.cpp for more examples. 3. Fixed a brain-dead bug in dealing with *MULTIPLE* FSs - now the code is recursive. 4. Following 2 the behavior of *EOR* execution is now truly parallel - the executions of the daugher blocks of an *EOR* block are now independent from each other. The revision of *OR* execution hasn't been done since it involves introducing *OR* FSs - this will happen in the next version. 062501: Version 1.7: 1. Full support of *MULTIPLE* FS (i.e., all FS operations are well-defined over *MULTIPLE* FS). 2. Test programs valTst and fsTst are greatly augmented to add more tests for value compactions and *MULTIPLE* FS. 3. Fixed FS printing problem (missing a pair of parentheses) and it's also printing out *MULTIPLE* FS correctly. 4. Fixed value compaction bug: recursive compaction is now in place. 5. Other bug fixes: tree.hpp in Toolbox now only allows node updating through _TreeIteratorBase<>::update() and _TreeIteratorBase<>::get() (dangerous), and the DMap updating is corrected; set 'succ' correctly in FStruc::extendPath(), etc. etc. 062101: Version 1.6: 1. New equation type 9 and 10 for get-lex-fs with unquoted (FS PATH). 2. Fixed errors in Lexicon::nextLex(const FStruc&,Symbol&). 061501: Version 1.5: 1. Lexicons facility: now you can load in multiple lexicons and use the various lexical-lookup equations (get-lex/get-lex-fs/next-lex). 2. Grammar module is now inside UKernel. 3. You can use wildcards (%) in the grammar rules (in both lexical and non-lexical rules). Run graTst to see a sample grammar. 4. You can change the starting NT for a grammar (default: "S"). 5. Grammar is now direction-independent (Grammar::setDir()). 6. Bug fixes: undefined initialization order of global/static objects in multiple translation units, incorrect path extending (FStruc::extendPath()), etc.