JetPAG 0.6.0 ChangeLog

Released January 3rd 2007


Some improvements to analysis of quantifiers, among them are dropping most of the leve-0 exit paths foroptional quantifiers (like a?) and not calculating exit paths anymore for fixed quantifiers (like a[3]).


JetPAG now generates default representation strings for abstract scanner rules defined inline in scanner test tables. This makes the output from programs generated by JetPAG and error messages more readable without need to define long redundant representation strings.


Revised lookahead path construction module. Fixed some bugs, and improved methods for reucing lookahead paths. Path construction is now more powerful and yields a more compact and efficient lookahead paths. It is more powerful due to leaving static methods and acquiring more information about the context during analysing, constructing and optimizing lookahead paths.


Debugging JetPAG is now much easie rand simpler. Instead of being based on compile-time macros, generating formatted HTML debugging information is now as simple as providing the command-line argument --debug.


The last form of set generation is finally implemented, completing all of the six forms used for set generation. This method, which is unlikely to be optimal in most cases, was left unimplemented and JetPAG used to generate a dummy method if it was found to be optimal.


Redesigned structure of embedding sources in generated files. Embedding source is now more effective and easier. JetPAG grammars now strictly define the order of embedded source directives; they must precede grammar rules and must follow this order:

#head_top_over
#head_top_below
#type_over
#type_sub
#ctor
#dtor
#type_below
#head_bottom
#impl_top_over
#impl_top_below
#impl_ns
#impl_bottom

Note the number of added directives. This allows embedded sourcein any region of generated files, including outside the namespace of generated recognizers. The corresponding place of each directive and its syntax are explained in the updated documentaion.


Reorganized source files, grouping is now more elegant with more separate directories.


Typedes of JScanner and JParser aren't generated anymore in token definitions file. Generated recognizers define their base types inline with inheritance. They seem to be useless most cases and cause additional indirect dependencies between generated files.


Working with several stream managers is now much easier. Now the method matchEOS() ends interpreting current stream and moves the stream manager below in the stack if there is, literally it's EndOfStream. The new method matchUltEOS() ends interpreting all streams in the stack, literally it's EndOfAllStreams. When a scanner hits EndOfStream in input, it first checks if there are more stream managers before tailing an EndOfStream token, and stream managers are popped automatically. This way scanner tail an EOS token only when all input stream are tokenized.


Error stack is deprecated. Methods errors() and clearErrors() have been omitted.


Character stream managers used by scanners are a unified type now, there is no polyporphism over derived types charStreamLL1Manager and charStreamLLkManager anymore. This is mainly because the small performance improvement of clearly defining LL(1) character stream managers is totally eclipsed by the overhead of virtual functions. The unified char stream manager uses binary-power cyclic buffers, similar to charStreamLLkManager previously.