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.