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

Unified Diff: tools/lexer_generator/nfa_builder.py

Issue 148293022: Experimental parser: make nfa nodes immutable (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/lexer_generator/nfa.py ('k') | no next file » | 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 ea30c2ce0e605a6bd0c92073691e24df8cd6c2e5..97ecfa15512dd843c8d86170349a378e020f56cc 100644
--- a/tools/lexer_generator/nfa_builder.py
+++ b/tools/lexer_generator/nfa_builder.py
@@ -248,20 +248,20 @@ class NfaBuilder(object):
@staticmethod
def __replace_catch_all(encoding, state):
catch_all = TransitionKey.unique('catch_all')
- transitions = state.transitions()
- if not catch_all in transitions:
+ states = list(state.state_iter_for_key(catch_all))
+ if not states:
return
f = lambda acc, state: acc | set(state.epsilon_closure_iter())
- reachable_states = reduce(f, transitions[catch_all], set())
- f = lambda acc, state: acc | set(state.transitions().keys())
+ reachable_states = reduce(f, states, set())
+ f = lambda acc, state: acc | set(state.key_iter())
keys = reduce(f, reachable_states, set())
keys.discard(TransitionKey.epsilon())
keys.discard(catch_all)
keys.discard(TransitionKey.unique('eos'))
inverse_key = TransitionKey.inverse_key(encoding, keys)
- if inverse_key:
- transitions[inverse_key] = transitions[catch_all]
- del transitions[catch_all]
+ if not inverse_key:
+ inverse_key = TransitionKey.unique('no_match')
+ state.swap_key(catch_all, inverse_key)
@staticmethod
def nfa(encoding, character_classes, subtree_map, name):
« no previous file with comments | « tools/lexer_generator/nfa.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698