Reviewers: marja,
Message:
Committed patchset #2 manually as r19048 (tree was closed).
Description:
Experimental parser: always add all subtrees
[email protected]
BUG=
Committed: https://code.google.com/p/v8/source/detail?r=19048
Please review this at https://codereview.chromium.org/141083011/
SVN Base: https://v8.googlecode.com/svn/branches/experimental/parser
Affected files (+12, -22 lines):
M tools/lexer_generator/nfa_builder.py
M tools/lexer_generator/rule_parser.py
Index: tools/lexer_generator/nfa_builder.py
diff --git a/tools/lexer_generator/nfa_builder.py
b/tools/lexer_generator/nfa_builder.py
index
5438b7b4d0c73d0d01d5a2b2132269dae9b32f1b..9de32c280f6920d5062f68bb96340755cc7618d0
100644
--- a/tools/lexer_generator/nfa_builder.py
+++ b/tools/lexer_generator/nfa_builder.py
@@ -156,17 +156,12 @@ class NfaBuilder(object):
def __unique_key(self, name):
return self.__key_state(TransitionKey.unique(name))
- def __join(self, graph, name, subgraph):
- subgraphs = self.__peek_state()['subgraphs']
- if not name in subgraphs:
- subgraphs[name] = self.__nfa(subgraph)
- (subgraph_start, subgraph_end, nodes_in_subgraph) = subgraphs[name]
- (start, ends) = self.__process(graph)
- self.__patch_ends(ends, subgraph_start)
- if subgraph_end:
- end = self.__new_state()
- subgraph_end.add_epsilon_transition(end)
- return (start, [end])
+ def __join(self, tree, subtree):
+ (subtree_start, subtree_end, nodes_in_subtree) = self.__nfa(subtree)
+ (start, ends) = self.__process(tree)
+ self.__patch_ends(ends, subtree_start)
+ if subtree_end:
+ return (start, [subtree_end])
else:
return (start, [])
@@ -186,8 +181,6 @@ class NfaBuilder(object):
def __push_state(self):
self.__states.append({
'start_node' : None,
- 'subgraphs' : {},
- 'unpatched_ends' : [],
})
def __pop_state(self):
@@ -204,10 +197,6 @@ class NfaBuilder(object):
if state['start_node']:
state['start_node'].close(start)
start = state['start_node']
- for k, subgraph in state['subgraphs'].items():
- if subgraph[1]:
- subgraph[1].close(None)
-
# Don't create an end node for the subgraph if it would be unused
(ends can
# be an empty list e.g., in the case when everything inside the
subgraph is
# "continue").
@@ -215,7 +204,6 @@ class NfaBuilder(object):
if ends:
end = self.__new_state()
self.__patch_ends(ends, end)
-
return (start, end, self.__node_number - start_node_number)
@staticmethod
@@ -282,8 +270,8 @@ class NfaBuilder(object):
return Term('UNIQUE_KEY', name)
@staticmethod
- def join_subgraph(term, name, subgraph_term):
- return Term('JOIN', term, name, subgraph_term)
+ def join_subgraph(tree, subtree):
+ return Term('JOIN', tree, subtree)
@staticmethod
def or_terms(terms):
Index: tools/lexer_generator/rule_parser.py
diff --git a/tools/lexer_generator/rule_parser.py
b/tools/lexer_generator/rule_parser.py
index
5351fe8221880e8d0672fafd2ac1aa8c1eee2c2e..a0a15af81a83a732c2ad3b2ea197cbc7873bdd7b
100644
--- a/tools/lexer_generator/rule_parser.py
+++ b/tools/lexer_generator/rule_parser.py
@@ -295,7 +295,9 @@ class RuleProcessor(object):
def optimize_dfa(self, log = False):
assert not self.__dfa
- self.__dfa = DfaOptimizer.optimize(self.dfa(), log)
+ assert not self.__minimial_dfa
+ self.__dfa = DfaOptimizer.optimize(self.minimal_dfa(), log)
+ self.__minimial_dfa = None
def minimal_dfa(self):
if not self.__minimial_dfa:
@@ -320,7 +322,7 @@ class RuleProcessor(object):
else:
assert subgraph == 'default', 'unimplemented'
graph = NfaBuilder.join_subgraph(
- graph, transition, rule_map[transition])
+ graph, rule_map[transition])
graphs.append(graph)
graph = NfaBuilder.or_terms(graphs)
rule_map[subgraph] = graph
--
--
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.