Backlog ======= Sprint Backlog -------------- * [open] Update wiki documentation to match current code. Product Backlog --------------- Bugs: * [] sometimes we want to return a list, sometimes we want to return a single value from a samselpla rule. We don't indicate what the return type of samselpla is, and so we get different results depending on whether that return is processed by another samselpla rule or not. * [] ()? will sometimes return the ? symbol even if the production returns a no-modify parse-tree token. Optimization: * [] I would like to convert non-terminal rules referring to terminal rules but that have '*' or '+' to be optimized to call the terminal versions of those rules. Release 1.x: * [] Develop an speg interface, where one can write PEG expressions directly in Scheme, rather than writing a .peg file and compiling it to Scheme. * [] Develop tree-manipulation operators for common operations: * Type coercion * String/List concatenation * ??? Release 1.1: * [] gensym'd symbols passed through write are not guaranteed to be unique when read. * [] Port to a second Scheme implementation. * [] Threading * run ordered choice rules in parallel. * run sequence of ! or & predicates in parallel. * [] Improve initialization performance for large grammars. * enable rule memoization * Use vector rather than list to store memoization hashes. * initialize the memoization structure on first use, rather than on init? * [] remove hand crafted tests and replace with pre-compiled .scm files. * [] Write tests for PEG file parser. * [] extend the character class test to test all character classes. * [] Implement left recursion. * [] Implement error reporting. * [] Look at the char-set-literals egg for a read-syntax that converts character ranges to a charset, and implement character ranges. Release 1.0: * [] utf8 testing and performance improvement. Either remove utf8 or make string-ref O(1). * [] Performance testing and optimization: + which (declare ...) options lead to performance improvements? + should the input buffer be a string or a list of characters? + should I use a hash or assoc list for memoization and symbol generation? [hash] + Is a record-type or cons faster? + Inline input buffer access routines. * [] Write PEG parser application manpage. * [done] Add atoms for .* and .+ productions. * [done] Add runtime debug output of parse. * [done] Add runtime profiling of parse. * [done] Ignore & and ! rather than returning the empty string. This requires support in je and jonai as well. * [done] Don't modify the parse tree when matching predicate (& and !) operators. * [done] gensym non-terminal names to avoid collision when define-toplevel is set. * [done] Permit multiple non-terminals to have an external definition * [done] Compile the expression '()' as the empty string. * [done] detect runtime options empty-string, sentinel, &c and enabled them for runtime code. * [done] use srfi-14/iset for character class comparison, removing the dependency on irregex code. * [done] implement secuxna module, global options for the parse. * [done] Create a PEG file parser application. * [wont] Create a wrapper to export English translations of the API code. * [done] Create grammar for PEG file parsing. * [done] Create bootstrap compiler for file parser. * [done] Create grammar for PEG file parser. * [done] Add full API documentation. * [done] Add test cases for each syntax element in the parser. * [done] Create a Chicken Scheme egg for this project. * [done] Implement code for each syntactic element in packrat parsers: * [done] terminals * [done] empty string * [done] end of input * [done] sequence * [done] ordered-choice * [done] zero-or-more * [done] one-or-more * [done] optional * [done] and-predicate * [done] not-predicate |------------------------------------------------------------(fa'o)--| ..__ `' "