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

Unified Diff: tools/lexer_generator/transition_keys.py

Issue 156313003: Experimental parser: cleanup transition_keys a bit (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 | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/transition_keys.py
diff --git a/tools/lexer_generator/transition_keys.py b/tools/lexer_generator/transition_keys.py
index 14dfe770bf60c4ea83b3647b3ac07084be9c2f02..983b4870ca05c49168a27b41b519021bc51fc131 100644
--- a/tools/lexer_generator/transition_keys.py
+++ b/tools/lexer_generator/transition_keys.py
@@ -48,16 +48,15 @@ class KeyEncoding(object):
KeyEncoding.__encodings[name] = self
self.__name = name
self.__primary_range = primary_range
- self.__primary_range_component = Term(
- 'NUMERIC_RANGE_KEY', primary_range[0], primary_range[1])
self.__lower_bound = primary_range[0]
self.__upper_bound = primary_range[1]
+ self.__primary_range_component = self.numeric_range_term(primary_range[0],
+ primary_range[1])
self.__named_ranges = {
k : Term('NAMED_RANGE_KEY', k) for k in named_ranges }
def f(v):
if len(v) == 2:
- assert primary_range[0] <= v[0] and v[1] <= primary_range[1]
- return Term('NUMERIC_RANGE_KEY', v[0], v[1])
+ return self.numeric_range_term(v[0], v[1])
elif len(v) == 1:
assert v[0] in self.__named_ranges
return self.__named_ranges[v[0]]
@@ -102,15 +101,16 @@ class KeyEncoding(object):
return chain(self.__primary_range_iter(), self.__named_ranges.itervalues())
def is_primary_range(self, r):
- assert self.lower_bound() <= r[0] and r[1] <= self.upper_bound()
- primary_range = self.__primary_range
- if (primary_range[0] <= r[0] and r[1] <= primary_range[1]):
- return True
- assert r[0] == r[1]
- return False
+ assert len(r) == 2
+ return self.in_primary_range(r[0], r[1])
+
+ def in_primary_range(self, a, b):
+ return self.lower_bound() <= a and b <= self.upper_bound()
- def in_primary_range(self, c):
- return self.is_primary_range((c, c))
+ def numeric_range_term(self, a, b):
+ assert type(a) == IntType and type(b) == IntType
+ assert self.in_primary_range(a, b)
+ return Term('NUMERIC_RANGE_KEY', a, b)
class TransitionKey(object):
'''Represents a transition from a state in DFA or NFA to another state.
@@ -161,8 +161,7 @@ class TransitionKey(object):
@staticmethod
def range(encoding, a, b):
'''Returns a TransitionKey for a single-character transition.'''
- assert type(a) == IntType and type(b) == IntType
- return TransitionKey(encoding, Term("NUMERIC_RANGE_KEY", a, b))
+ return TransitionKey(encoding, encoding.numeric_range_term(a, b))
@staticmethod
def unique(term): # TODO(dcarney): rename
@@ -177,9 +176,9 @@ class TransitionKey(object):
key = term.name()
args = term.args()
if key == 'RANGE':
- components.append(Term('NUMERIC_RANGE_KEY', args[0], args[1]))
+ components.append(encoding.numeric_range_term(args[0], args[1]))
elif key == 'LITERAL':
- components += map(lambda x : Term('NUMERIC_RANGE_KEY', x, x), args)
+ components += map(lambda x : encoding.numeric_range_term(x, x), args)
elif key == 'CAT':
for x in args:
TransitionKey.__process_term(encoding, x, components, key_map)
@@ -345,7 +344,7 @@ class TransitionKey(object):
raise Exception('unprintable %s' % component)
r = component.args()
def to_str(x):
- assert not encoding or encoding.in_primary_range(x)
+ assert not encoding or encoding.in_primary_range(x, x)
if x > 127:
return str(x)
if not x in TransitionKey.__printable_cache:
@@ -519,7 +518,8 @@ class TransitionKey(object):
if merge_ranges:
ranges = TransitionKey.__merge_ranges(encoding, ranges)
other_keys = sorted(other_keys, cmp=TransitionKey.__component_compare)
- range_terms = map(lambda x : Term('NUMERIC_RANGE_KEY', x[0], x[1]), ranges)
+ range_terms = map(
+ lambda x : encoding.numeric_range_term(x[0], x[1]), ranges)
return chain(iter(range_terms), iter(other_keys))
@staticmethod
@@ -560,7 +560,7 @@ class TransitionKey(object):
@staticmethod
def __invert_components(encoding, components):
def key(x, y):
- return Term('NUMERIC_RANGE_KEY', x, y)
+ return encoding.numeric_range_term(x, y)
last = None
classes = set(encoding.named_range_value_iter())
for c in components:
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698