The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Parse::Marpa::Doc::To_Do - Marpa's To Do List

HIGH PRIORITY

  • Create a "stress test" for zero-width and- and or- nodes: A grammar with two rules in a cycle. Each rule is all nulling (nullable?) symbols except for the last symbol, which must be non-nulling.

    I may assume in several places and zero-length and-nodes have no cause or predecessor. I have to find any places where this assumption is being made, and change it. In addition to the above test, I may want to reread the relevant evaluator code.

  • Code to ensure zero-width or-nodes have unique parents seems to assume that the child and-nodes have no cause or predecessor. I can't assume this. I need to create a work list or or-nodes, and re-add those when cloned and-nodes are added to their parent list.

    I can assume no cycles. Reason: Marpa does not allow zero-length rules, and cycles in the bocage only occur when rules derive rules. Breaking up rules into and-nodes with at most two children will not create cycles. Rules do not cycle internally. A sequence of and- and or- nodes will descend via predecessors until it hit the beginning of the rule, and then stop.

  • Delete IS_CHAF_{R,L}HS

  • I should start to assume that anyone explicitly using separate recognizer and evaluator stages knows what they are doing. This means:

    • Revise the documentation accordingly. Just because they are using the plumbing interface does not mean they want to know about the recognizer/evaluator distinction.

    • No auto precomputation in the Grammar module. Just abend with an error message.

    • No auto cloning? Assume most users will have cloning handled as necessary at a higher level.

    • No automatic end_input when the evaluator is called. Just abend with an error message.

  • Make minimal work for null symbols.

  • Forbid simulatenous MAXIMAL & MINIMAL setting on rules & symbols. Combine them internally as ::GREEDY

  • Add ah_minimal.t -- ah2.t with minimal set on the grammar

  • Add optimizations when max_parses <= 1 For example, no need to prune duplicate parses

  • Ensure -ENV is not on for smart comments when I leave alpha

  • Should or_map's be hashes instead of array? How many duplicate entries are there and what's the cost?

  • Add MAX_COUNT for rules. Implement on one of left- and right- recursion only. No immediate need for both.

  • Factor out MDL so that it works by calling (or creating options for a call to) Grammar::new or Grammar::set.

  • Factor out MDL Lexer.

  • Convert all cloning & stringization to Storable.

  • Test: Are regexes Storable's?

  • Remove code_diag.t tests for string closures. Probably can remove all of code_diag.t.

  • Check Parse::Marpa TODO list.

  • Add arguments for INITIAL_ACTION, FINAL_ACTION, ACTIONS. Make sure there are tests for them.

MEDIUM PRIORITY

  • Allow cloning of unstripped recognizers

  • Add a SYNOPSIS to the Plumbing document.

  • Parse bocage creation can probably be made a bit slightly cleaner. At least I think so, based on what I found when revising that part of the Internals doc.

  • Make sure that nulling symbols can never be terminals

LOW PRIORITY

  • Add a trace_choices option. There was an option to trace non-trivial evaluation choices in the old evaluator, and the new trace_iterations doesn't entirely replace it.

  • Add a show_derivation option.

  • Add to test set: Basic tests of sequences. The matrix is separation (none/perl5/proper); and minimium count (0 or 1); keep vs. no-keep.

MAYBE, MAYBE NOT

  • Test lexing suffixes? Remove them?

  • Speed-up for pre-computing lexables? Predict lexables based on user request?

  • show_tree before first call to value? Should it cause an error message? How about after unsuccessful call to value?

Other Changes

  • Allow alternation?

  • Downgrade version conflict or semantics mismatch to warning?

  • Add {} and [] syntax to MDL production statements.

OTHER FROZEN

Lifting Restrictions on Sequence Productions

The restriction of sequences to sequence productions and of sequence productions to a single sequence is not the result of any limit of the Marpa parse engine. It would not be hard to allow any number of sequences and optional sequences on the right hand side of any BNF production. I'm open to revisiting this issue and lifting the restriction.

The problem is figuring out how to conveniently specify their semantics. As the right hand side of a production grows more complex, the semantics becomes more complex to write, more bug-prone, and harder to debug.

SUPPORT

See the support section in the main module.

AUTHOR

Jeffrey Kegler

LICENSE AND COPYRIGHT

Copyright 2007 - 2008 Jeffrey Kegler

This program is free software; you can redistribute it and/or modify it under the same terms as Perl 5.10.0.