Reviewers: marja,

Message:
Committed patchset #1 manually as r19299 (presubmit successful).

Description:
Experimental parser: cleanup transition_keys a bit

[email protected]

BUG=

Committed: https://code.google.com/p/v8/source/detail?r=19299

Please review this at https://codereview.chromium.org/156313003/

SVN Base: https://v8.googlecode.com/svn/branches/experimental/parser

Affected files (+19, -19 lines):
  M tools/lexer_generator/transition_keys.py


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:


--
--
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.

Reply via email to