Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1207)

Unified Diff: tools/lexer_generator/nfa.py

Issue 155573004: Experimental parser: Abstact state matching (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/lexer_generator/dfa_optimizer.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/nfa.py
diff --git a/tools/lexer_generator/nfa.py b/tools/lexer_generator/nfa.py
index 2367630b76b711cea0725b5df5e1083e276f3ca8..ed0b10dcacfbd44234cb2730791341950c156642 100644
--- a/tools/lexer_generator/nfa.py
+++ b/tools/lexer_generator/nfa.py
@@ -37,9 +37,6 @@ class NfaState(AutomatonState):
self.__epsilon_closure = None
self.__action = Action.empty_action()
- def transitions_to_multiple_states(self):
- return True
-
def epsilon_closure_iter(self):
return iter(self.__epsilon_closure)
@@ -94,17 +91,17 @@ class NfaState(AutomatonState):
if not unclosed:
self.__add_transition(TransitionKey.epsilon(), end)
- def __matches(self, match_func, value):
- # f collects states whose corresponding TransitionKey matches 'value'.
- items = self.__transitions.items()
- iters = [iter(states) for (key, states) in items if match_func(key, value)]
- return chain(*iters)
-
- def transition_state_iter_for_char(self, value):
- return self.__matches(lambda k, v : k.matches_char(v), value)
-
- def transition_state_iter_for_key(self, value):
- return self.__matches(lambda k, v : k.is_superset_of_key(v), value)
+ def key_state_iter(
+ self,
+ key_filter = lambda x: True,
+ state_filter = lambda x: True,
+ match_func = lambda x, y: True,
+ yield_func = lambda x, y: (x, y)):
+ for key, states in self.__transitions.items():
+ if key_filter(key):
+ for state in states:
+ if state_filter(state) and match_func(key, state):
+ yield yield_func(key, state)
class Nfa(Automaton):
« no previous file with comments | « tools/lexer_generator/dfa_optimizer.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698