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

Unified Diff: tools/lexer_generator/automaton.py

Issue 155573004: Experimental parser: Abstact state matching (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 | « no previous file | tools/lexer_generator/code_generator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/automaton.py
diff --git a/tools/lexer_generator/automaton.py b/tools/lexer_generator/automaton.py
index 2ed399b3ce8d205b54e157bd50b009c75b0c9f4c..a3082fd313640c36b539bfa7dfc537dff7b4821f 100644
--- a/tools/lexer_generator/automaton.py
+++ b/tools/lexer_generator/automaton.py
@@ -55,26 +55,23 @@ class AutomatonState(object):
__pass = lambda x : True
def key_iter(self, key_filter = __pass):
- for k in self.transitions().keys():
- if key_filter(k): yield k
+ return self.key_state_iter(
+ key_filter = key_filter, yield_func = lambda x, y: x)
def state_iter(self, key_filter = __pass, state_filter = __pass):
- return self.key_state_iter(key_filter, state_filter, lambda x, y: y)
-
- def key_state_iter(
- self,
- key_filter = __pass,
- state_filter = __pass,
- yield_func = lambda x, y : (x, y)):
- for key, states in self.transitions().items():
- if key_filter(key):
- if not self.transitions_to_multiple_states():
- if state_filter(states):
- yield yield_func(key, states)
- else:
- for state in states:
- if state_filter(state):
- yield yield_func(key, state)
+ return self.key_state_iter(
+ key_filter = key_filter, state_filter = state_filter,
+ yield_func = lambda x, y: y)
+
+ def transition_state_iter_for_char(self, value):
+ return self.key_state_iter(
+ match_func = lambda k, v : k.matches_char(value),
+ yield_func = lambda x, y: y)
+
+ def transition_state_iter_for_key(self, value):
+ return self.key_state_iter(
+ match_func = lambda k, v : k.is_superset_of_key(value),
+ yield_func = lambda x, y: y)
class Automaton(object):
« no previous file with comments | « no previous file | tools/lexer_generator/code_generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698