Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: tools/lexer_generator/nfa_builder.py

Issue 138973007: Experimental parser: support subgraph inlining (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/gyp/v8.gyp ('k') | tools/lexer_generator/regex_lexer.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/nfa_builder.py
diff --git a/tools/lexer_generator/nfa_builder.py b/tools/lexer_generator/nfa_builder.py
index dd1a12fdb2169723b7490072c2c13723bc77e3b9..36a9fc3a3192b7d8831d47e5407c169c11d92800 100644
--- a/tools/lexer_generator/nfa_builder.py
+++ b/tools/lexer_generator/nfa_builder.py
@@ -147,10 +147,11 @@ class NfaBuilder(object):
end.add_epsilon_transition(global_end)
return (start, [end])
- def __continue(self, subtree):
+ def __continue(self, subtree, depth):
'add an epsilon transitions to the start node of the current subtree'
(start, ends) = self.__process(subtree)
- state = self.__peek_state()
+ index = -1 - min(int(depth), len(self.__states) - 1)
+ state = self.__states[index]
if not state['start_node']:
state['start_node'] = self.__new_state()
self.__patch_ends(ends, state['start_node'])
@@ -161,8 +162,11 @@ class NfaBuilder(object):
def __join(self, tree, name):
(subtree_start, subtree_end, nodes_in_subtree) = self.__nfa(name)
- (start, ends) = self.__process(tree)
- self.__patch_ends(ends, subtree_start)
+ if tree:
+ (start, ends) = self.__process(tree)
+ self.__patch_ends(ends, subtree_start)
+ else:
+ start = subtree_start
if subtree_end:
return (start, [subtree_end])
else:
@@ -196,9 +200,6 @@ class NfaBuilder(object):
def __pop_state(self):
return self.__states.pop()
- def __peek_state(self):
- return self.__states[-1]
-
def __nfa(self, name):
tree = self.__subtree_map[name]
start_node_number = self.__node_number
@@ -271,8 +272,8 @@ class NfaBuilder(object):
return Term('ACTION', term, action.to_term())
@staticmethod
- def add_continue(term):
- return Term('CONTINUE', term)
+ def add_continue(tree, depth):
+ return Term('CONTINUE', tree, depth)
@staticmethod
def unique_key(name):
« no previous file with comments | « tools/gyp/v8.gyp ('k') | tools/lexer_generator/regex_lexer.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698