Revision: 17902
Author:   [email protected]
Date:     Wed Nov 20 10:06:26 2013 UTC
Log:      Experimental parser: small cleanups

[email protected]

BUG=

Review URL: https://codereview.chromium.org/77863004
http://code.google.com/p/v8/source/detail?r=17902

Modified:
 /branches/experimental/parser/tools/lexer_generator/automata_test.py
 /branches/experimental/parser/tools/lexer_generator/automaton.py
 /branches/experimental/parser/tools/lexer_generator/dfa.py
 /branches/experimental/parser/tools/lexer_generator/lexer_test.py
 /branches/experimental/parser/tools/lexer_generator/nfa.py
 /branches/experimental/parser/tools/lexer_generator/nfa_builder.py

=======================================
--- /branches/experimental/parser/tools/lexer_generator/automata_test.py Wed Nov 20 09:31:53 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/automata_test.py Wed Nov 20 10:06:26 2013 UTC
@@ -32,20 +32,15 @@
 from nfa_builder import NfaBuilder
 from dfa import Dfa

-def dfa_from_nfa(nfa):
-  (start_name, dfa_nodes) = nfa.compute_dfa()
-  return Dfa(start_name, dfa_nodes)
-
-def build_automata(string):
-  nfa = NfaBuilder().nfa(RegexParser.parse(string))
-  dfa = dfa_from_nfa(nfa)
-  return (nfa, dfa, dfa.minimize())
-
-def simple_action(string):
-  return Action(None, (string, None))
-
 class AutomataTestCase(unittest.TestCase):

+  @staticmethod
+  def __build_automata(string):
+    nfa = NfaBuilder().nfa(RegexParser.parse(string))
+    (start_name, dfa_nodes) = nfa.compute_dfa()
+    dfa = Dfa(start_name, dfa_nodes)
+    return (nfa, dfa, dfa.minimize())
+
     # (pattern, should match, should not match)
     __test_data = [
       ("a", ["a"], ["b", ""]),
@@ -71,7 +66,7 @@

     def test_matches(self):
       for (regex, matches, not_matches) in self.__test_data:
-        automata = build_automata(regex)
+        automata = self.__build_automata(regex)
         for string in matches:
           for automaton in automata:
             self.assertTrue(automaton.matches(string))
@@ -81,7 +76,7 @@

     def test_can_construct_dot(self):
       for (regex, matches, not_matches) in self.__test_data:
-        for automaton in build_automata(regex):
+        for automaton in self.__build_automata(regex):
           automaton.to_dot()

     def test_minimization(self):
@@ -100,4 +95,3 @@

       mdfa = Dfa('S_0', mapping).minimize()
       self.assertEqual(3, mdfa.node_count())
-
=======================================
--- /branches/experimental/parser/tools/lexer_generator/automaton.py Wed Nov 20 09:31:53 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/automaton.py Wed Nov 20 10:06:26 2013 UTC
@@ -154,11 +154,10 @@
def visit_all_states(self, visitor, visit_state = None, state_iter = None): return self.visit_states(self.start_set(), visitor, visit_state, state_iter)

-  # TODO use iters
   @staticmethod
   def epsilon_closure(states):
-    f = lambda acc, node: acc | node.epsilon_closure()
-    return reduce(f, states, set(iter(states)))
+    f = lambda state : state.epsilon_closure_iter()
+    return set(chain(iter(states), *map(f, states)))

   @staticmethod
   def __transition_states_for_char(valid_states, c):
=======================================
--- /branches/experimental/parser/tools/lexer_generator/dfa.py Wed Nov 20 09:31:53 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/dfa.py Wed Nov 20 10:06:26 2013 UTC
@@ -54,8 +54,8 @@
   def transitions(self):
     return self.__transitions

-  def epsilon_closure(self):
-    return set([self])
+  def epsilon_closure_iter(self):
+    return iter([])

   # TODO abstract state matching
   def __matches(self, match_func, value):
=======================================
--- /branches/experimental/parser/tools/lexer_generator/lexer_test.py Wed Nov 20 09:50:09 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/lexer_test.py Wed Nov 20 10:06:26 2013 UTC
@@ -39,7 +39,8 @@
           self.assertEquals(expected[i][0], action)
           self.assertEquals(expected[i][1], string[start : stop])

-  def __terminate(self):
+  @staticmethod
+  def __terminate():
     return (Action(None, ('terminate', None)), '\0')

   def test_simple(self):
=======================================
--- /branches/experimental/parser/tools/lexer_generator/nfa.py Wed Nov 20 09:31:53 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/nfa.py Wed Nov 20 10:06:26 2013 UTC
@@ -40,8 +40,8 @@
   def transitions_to_multiple_states(self):
     return True

-  def epsilon_closure(self):
-    return self.__epsilon_closure
+  def epsilon_closure_iter(self):
+    return iter(self.__epsilon_closure)

   def set_epsilon_closure(self, closure):
     assert self.is_closed()
=======================================
--- /branches/experimental/parser/tools/lexer_generator/nfa_builder.py Wed Nov 13 08:20:20 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/nfa_builder.py Wed Nov 20 10:06:26 2013 UTC
@@ -224,7 +224,7 @@
     transitions = state.transitions()
     if not catch_all in transitions:
       return
-    f = lambda acc, state: acc | state.epsilon_closure()
+    f = lambda acc, state: acc | set(state.epsilon_closure_iter())
     reachable_states = reduce(f, transitions[catch_all], set())
     f = lambda acc, state: acc | set(state.transitions().keys())
     keys = reduce(f, reachable_states, set())

--
--
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