2023-08-05 Jean Sévère Durand * chain: Fixed another bug. This bug is mainly caused by an incorrect treatment of "virtual nodes". After this bug is fixed, I can successfully parse a sequence of 28 tokens and non-trivial structure. This is by far the most successful version, so I think it deserves a version bump. 2023-07-21 Jean Sévère Durand * chain: I finally have a version without trivial bugs. This means my trivial tests seem to produce correct results now. Quite remarkable. :D 2023-01-28 Jean Sévère Durand * chain: Move the forest crate to the item module in the chain crate. That crate used to provide a kind of forests. This turns out to be an item derivation forest for the chain-rule machine. So it seems appropriate to implement this in the chain crate instead. * chain: Also the chain rule machine seems to be complete now. It remains to test the machine to find the must-be errors. * graph: Now the doubly linked graphs do not exclude nodes with duplicate edge sets. That is, previously, when adding a node whose children set is equal to that of another existing node, the graph just reuses that old node. Now this is not the case anymore. The reason is that this only saves some minor memory usage, at the cost of more expensive graph operations, and might affect the time complixity, so I just remove this functionality. 2023-01-22 Jean Sévère Durand * forest: Correctly clone nodes. Now the forest can detect if a node is packed or cloned, and correctly clones a node in those circumstances. But it still needs to be tested. 2023-01-20 Jean Sévère Durand * chain: A prototype is added, and passes some tests. But I am still testing if its performance meets the time complexity requirement. 2023-01-13 Jean Sévère Durand * forest: A prototype is completed, and passes some tests. 2022-11-15 Jean Sévère Durand * nfa: Stop worrying about monadic anamorphisms. I was trying to design a way to use monadic anamorphisms to build and parse regular expressions. But, after some more thoughts, I can only think about implementations that affect the performance and are quite specifically tailored to my use-cases. This means the design is neither efficient nor generic. So what is the use of it anyways? In the end, I decided to mildly generalize my usual pattern of recursive descent parsing. After all, my current focus is to implement a version of NFA that can show me derivatives of the atomic languages in a human-friendly and easy-to-use way. This will help me catch errors in my algorithms. 2022-11-13 Jean Sévère Durand * gnu-standards: Add basic files required by the GNU standard.