Reviewers: marja,

Message:
Committed patchset #1 manually as r17905 (presubmit successful).

Description:
Experimental parser: cleanup transition iteration a little

[email protected]

BUG=

Committed: https://code.google.com/p/v8/source/detail?r=17905

Please review this at https://codereview.chromium.org/78133002/

SVN Base: https://v8.googlecode.com/svn/branches/experimental/parser

Affected files (+8, -10 lines):
  M tools/lexer_generator/dfa.py
  M tools/lexer_generator/nfa.py


Index: tools/lexer_generator/dfa.py
diff --git a/tools/lexer_generator/dfa.py b/tools/lexer_generator/dfa.py
index 154caef89c09d0ca26ed4fd2507994d251815e95..12d3dce014e8efeba8f891310a3e85b079af3170 100644
--- a/tools/lexer_generator/dfa.py
+++ b/tools/lexer_generator/dfa.py
@@ -59,10 +59,8 @@ class DfaState(AutomatonState):

   # TODO abstract state matching
   def __matches(self, match_func, value):
-    # f collects states whose corresponding TransitionKey matches 'value'.
-    f = (lambda acc, (key, state):
-           acc | set([state]) if match_func(key, value) else acc)
-    return reduce(f, self.__transitions.items(), set())
+    items = self.__transitions.items()
+    return [state for (key, state) in items if match_func(key, value)]

   def transition_state_iter_for_char(self, value):
     return iter(self.__matches(lambda k, v : k.matches_char(v), value))
@@ -76,7 +74,7 @@ class DfaState(AutomatonState):
       return None
# Since this is a dfa, we should have at most one such state. Return it.
     assert len(matches) == 1
-    return iter(matches).next()
+    return matches[0]

 class Dfa(Automaton):

Index: tools/lexer_generator/nfa.py
diff --git a/tools/lexer_generator/nfa.py b/tools/lexer_generator/nfa.py
index 289ec48eee21980b156b2a1eea7a153372d59bd6..344ef70c54d861eb2e3be489b1ef3209d3bdc788 100644
--- a/tools/lexer_generator/nfa.py
+++ b/tools/lexer_generator/nfa.py
@@ -99,15 +99,15 @@ class NfaState(AutomatonState):

   def __matches(self, match_func, value):
     # f collects states whose corresponding TransitionKey matches 'value'.
-    f = (lambda acc, (key, states):
-           acc | states if match_func(key, value) else acc)
-    return reduce(f, self.__transitions.items(), set())
+    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 iter(self.__matches(lambda k, v : k.matches_char(v), value))
+    return self.__matches(lambda k, v : k.matches_char(v), value)

   def transition_state_iter_for_key(self, value):
- return iter(self.__matches(lambda k, v : k.is_superset_of_key(v), value))
+    return self.__matches(lambda k, v : k.is_superset_of_key(v), value)

 class Nfa(Automaton):



--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to