Revision: 17679
Author:   [email protected]
Date:     Wed Nov 13 09:58:59 2013 UTC
Log:      Expermental parser: fix state iteration in codegen

[email protected]

BUG=

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

Modified:
 /branches/experimental/parser/tools/lexer_generator/code_generator.py
 /branches/experimental/parser/tools/lexer_generator/dfa.py

=======================================
--- /branches/experimental/parser/tools/lexer_generator/code_generator.py Wed Nov 13 08:33:29 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/code_generator.py Wed Nov 13 09:58:59 2013 UTC
@@ -88,11 +88,12 @@

   @staticmethod
   def dfa_to_code(dfa):
+    start_node_number = dfa.start_state().node_number()
     code = '''
 YYCTYPE yych = *cursor_;
 goto code_%s;
-''' % (dfa.start_state().node_number())
-    for n in dfa.all_states_iter():
-      code += CodeGenerator.dfa_state_to_code(n,
- dfa.start_state().node_number())
-    return code
+''' % start_node_number
+    def f(state, code):
+      code += CodeGenerator.dfa_state_to_code(state, start_node_number)
+      return code
+    return dfa.visit_all_states(f, code)
=======================================
--- /branches/experimental/parser/tools/lexer_generator/dfa.py Wed Nov 13 09:50:56 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/dfa.py Wed Nov 13 09:58:59 2013 UTC
@@ -91,9 +91,6 @@
   def terminal_set(self):
     return set(self.__terminal_set)

-  def all_states_iter(self):
-    return self.__start.state_iter()
-
   @staticmethod
   def __match_char(state, char):
match = list(state.state_iter(key_filter = lambda k: k.matches_char(char)))
@@ -136,4 +133,22 @@
     yield (state.action(), last_position, len(string))

   def minimize(self):
-    pass
+    paritions = []
+    working_set = []
+    action_map = {}
+    id_map = {}
+    def f(state, visitor_state):
+      node_number = state.node_number()
+      assert not node_number in id_map
+      id_map[node_number] = state
+      action = state.action()
+      if not action in action_map:
+        action_map[action] = set()
+      action_map[action].add(node_number)
+    self.visit_all_states(f)
+    total = 0
+    for p in action_map.values():
+      paritions.append(p)
+      total += len(p)
+    assert total == self.__node_count
+

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