summaryrefslogtreecommitdiff
path: root/grammar/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'grammar/src/lib.rs')
-rw-r--r--grammar/src/lib.rs15
1 files changed, 14 insertions, 1 deletions
diff --git a/grammar/src/lib.rs b/grammar/src/lib.rs
index 627ae6f..297cb66 100644
--- a/grammar/src/lib.rs
+++ b/grammar/src/lib.rs
@@ -462,6 +462,19 @@ impl Grammar {
// REVIEW: Do we have a better way to record expansion information
// than to compute the transitive closure?
+ // REVIEW: We need a way to eliminate those left-linearly expanded
+ // edges whose labels had already been considered, and we need to
+ // preserve the transition of the `left_p` property at the same
+ // time.
+ //
+ // Maybe we could decide to delete those edges in the
+ // `remove_predicate`? But we cannot access the states of NFA in
+ // that predicate, in the current design, thus we need to refactor
+ // some codes, it seems: we need a way to "compactify" an NFA, by
+ // a key function, in such a way that if two entries have the same
+ // key (determined by the key function), then only one, determined
+ // by another function, remains in the NFA.
+
/// A transformer of labels to be fed into
/// [`closure`][nfa::default::nfa::DefaultNFA::closure], with the
/// predicate that returns true if and only if the label of the
@@ -483,7 +496,7 @@ impl Grammar {
}
// Compute if this is from left-linear expansion: it is so if
- // and only if one if either the edges comes from left-linear
+ // and only if either one of the edges comes from left-linear
// expansion or we are moving across a non-terminal expansion,
// that is to say, the source of the second edge is the
// starting edge of a non-terminal.