Revision history for Gnaw

0.01    17 Oct 2008/11:15 pm

First version, released on an unsuspecting world. Basic grammars 
can be created and executed.

The "commit" function is busted, though, and large chunks of the 
module may need to be rewritten to fix it. All the other functions 
seem to be doing their job. Well, except for set_n, which is also 
broken, but fixing it probably won't require a massive module-wide 
rewrite.

0.02	17 Oct 2008

added a package declaration.

0.03	18 Oct 2008

Mainly fixed a lot of problems with POD. Documentation should be 
readable now using perldoc.

Also, hacked a fix for set_n. It was hitting end of string, and end 
of string returns null string, so I added null string to the class 
of disallowed characters. 

Lastly, wrapped up the "current" and "restore" pointers into 
subroutine calls. I think the fix for "commit" problems is to keep 
track of everyone who points to the linked list of text or the call 
tree, and any time we delete text or call tree branches, we have to 
update anyone who is pointing to those locations. 

0.04	18 Oct 2008

changed how grammar commands access the linked list of text. created 
a concept called a "marker" so that as we delete text in linked list 
we can update any commands that pointed to old text that is to be 
deleted.

This should help the "commit" function, but the commit tests are 
still failing.

0.05	19 Oct 2008

Changed the code for handling get/restore of position within the 
call tree. Quantifiers were a serious jumble with this. added some 
debugging routines, cause this gets pretty nasty even with a simple 
grammar. See the GNAWMONITOR subroutine, now called amply throughout 
the module. last but not least, I added a new quantifier test 
(command_quantifier_multi). This test creates a grammar of 

series(greedy(lit('x'),'s'), greedy(lit('x'),'s')).

The parser should be able to handle it, but doesn't. test fails. 
Probably another problem with the fricken markers. 
Actually, probably an issue with getting the call to greedy to 
remember the last number of times it tried, and try one less the 
second time around. need to debug the quantifier "try" and "success" 
numbers through the flow. Argh.

oh, and put hardreturns into the readme.


0.07	22 Oct 2008

Oh my head. Massive rewrite. The calltree was conceptually totally 
wrong. Changed call tree from a tree to a stack. No longer keep 
different branches around. 

Multiple quantifiers now work together. The following grammar now works:

	$grammar = 
		match(
			series( 
				capture(greedy(lit('x'),'s'),$first_callback), 
				capture(greedy(lit('x'),'s'),$second_callback)
			)
		);

	$grammar->('xxxxx')


The first greedy will swallow the entire string, then release one 
character. This will allow second greedy to match on the last x, 
and the entire grammar passes.

first capture eq 'xxxx'.
second capture eq 'x'

0.09	23 Oct 2008

Got rid of the "commit" function. Replacing it with a function called 
"consumable". The "consumable" function is still in progress. Added a 
"thing" function which maps to a regular expression "dot" function, 
as in 

	/ blah . blah /

Added some quantifier shortcuts for "some" and "any". 
These map to '+' and '*'.

Added shortcuts for "something" and "anything". 
These map to '.+' and '.*'


0.10	23 October 2008

Added consumable function and got first draft of it to work with 
grammars not involving quantifiers. Grammars with quantifiers
and consumables end up crashing.

consumable will call any callbacks, delete the appropriate 
section of the call tree, and delete the consumable text.

Added a subroutine that dumps what's left of the string.


0.11	24 October 2008

The "consumable" function had a bug. It was deleting entire
call stack. That appears to be fixed now.


=====================================================================