Reviewers: marja,

Message:
Committed patchset #1 manually as r17679.

Description:
Expermental parser: fix state iteration in codegen

[email protected]

BUG=

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

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

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

Affected files (+25, -9 lines):
  M tools/lexer_generator/code_generator.py
  M tools/lexer_generator/dfa.py


Index: tools/lexer_generator/code_generator.py
diff --git a/tools/lexer_generator/code_generator.py b/tools/lexer_generator/code_generator.py index 559b8d95442a666c9f8d858a0d4c8b5321accf43..82b30bbaa5b5ac9775e484d2de46dbb7c0ab4a9e 100644
--- a/tools/lexer_generator/code_generator.py
+++ b/tools/lexer_generator/code_generator.py
@@ -88,11 +88,12 @@ code_%s:

   @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)
Index: tools/lexer_generator/dfa.py
diff --git a/tools/lexer_generator/dfa.py b/tools/lexer_generator/dfa.py
index a7b388c1a78bb4338789b5b5f8814c6e0598c3ce..0431a0f53371a9fcca1fa0506001e9fa13fd821b 100644
--- a/tools/lexer_generator/dfa.py
+++ b/tools/lexer_generator/dfa.py
@@ -91,9 +91,6 @@ class Dfa(Automaton):
   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 @@ class Dfa(Automaton):
     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