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 76263003: Experimental lexer generator: make tests pass again + style fixes. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 7 years, 1 month 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/lexer_test.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/transition_keys.py
diff --git a/tools/lexer_generator/transition_keys.py b/tools/lexer_generator/transition_keys.py
index 92d50b96334301c3cce92a65ebc66fc5fb3efc88..98332ec846573ddd05dd6dc7ce19963da01895e1 100644
--- a/tools/lexer_generator/transition_keys.py
+++ b/tools/lexer_generator/transition_keys.py
@@ -30,12 +30,13 @@ from string import printable
class TransitionKey:
__class_bounds = {
- "latin_1" : (1, 255),
- # These are not "real" ranges; they just need to be separate.
- "whitespace" : (256, 256),
- "literal" : (257, 257),
- "eos" : (258, 258),
- "zero" : (259, 259),
+ 'latin_1' : (1, 255),
+ # These are not real ranges; they just need to be separate from any real
+ # ranges.
+ 'whitespace' : (256, 256),
+ 'literal' : (257, 257),
+ 'eos' : (258, 258),
+ 'zero' : (259, 259),
}
__lower_bound = 1
__upper_bound = reduce(lambda acc, (k, v): max(acc, v[1]), __class_bounds.items(), 0)
@@ -46,7 +47,7 @@ class TransitionKey:
@staticmethod
def __in_latin_1(char):
- bound = TransitionKey.__class_bounds["latin_1"]
+ bound = TransitionKey.__class_bounds['latin_1']
return (bound[0] <= char and char <= bound[1])
@staticmethod
@@ -68,6 +69,7 @@ class TransitionKey:
assert r[1] <= TransitionKey.__upper_bound
assert r[0] <= r[1]
r_is_class = TransitionKey.__is_class_range(r)
+ # Assert that the ranges are in order.
if last != None and check_merged:
assert last[1] + 1 < r[0] or r_is_class
if not TransitionKey.__in_latin_1(r[0]):
@@ -101,12 +103,15 @@ class TransitionKey:
@staticmethod
def epsilon():
- return TransitionKey.__cached_key("epsilon", lambda name : [])
+ return TransitionKey.__cached_key('epsilon', lambda name : [])
@staticmethod
def any():
- return TransitionKey.__cached_key("any",
- lambda name : TransitionKey.__class_bounds.values())
+ def bounds_getter(name):
+ bounds = TransitionKey.__class_bounds.values()
+ bounds.sort()
+ return bounds
+ return TransitionKey.__cached_key('any', bounds_getter)
@staticmethod
def single_char(char):
@@ -120,7 +125,7 @@ class TransitionKey:
bound = TransitionKey.__unique_key_counter
TransitionKey.__unique_key_counter -= 1
return [(bound, bound)]
- name = "__" + name
+ name = '__' + name
return TransitionKey.__cached_key(name, get_bounds)
@staticmethod
@@ -146,9 +151,9 @@ class TransitionKey:
elif class_name in key_map:
ranges += key_map[class_name].__ranges
else:
- raise Exception("unknown character class [%s]" % graph[1])
+ raise Exception('unknown character class [%s]' % graph[1])
else:
- raise Exception("bad key [%s]" % key)
+ raise Exception('bad key [%s]' % key)
@staticmethod
def character_class(graph, key_map):
@@ -238,14 +243,14 @@ class TransitionKey:
TransitionKey.__printable_cache[x] = res
return TransitionKey.__printable_cache[x]
if r[0] == r[1]:
- return "%s" % to_str(r[0])
+ return '%s' % to_str(r[0])
else:
- return "[%s-%s]" % (to_str(r[0]), to_str(r[1]))
+ return '[%s-%s]' % (to_str(r[0]), to_str(r[1]))
def __str__(self):
if self.__name:
return self.__name
- return ", ".join(TransitionKey.__range_str(x) for x in self.__ranges)
+ return ', '.join(TransitionKey.__range_str(x) for x in self.__ranges)
@staticmethod
def __disjoint_keys(range_map):
@@ -340,7 +345,7 @@ class TransitionKey:
inverted = []
last = None
classes = set(TransitionKey.__class_bounds.values())
- latin_1 = TransitionKey.__class_bounds["latin_1"]
+ latin_1 = TransitionKey.__class_bounds['latin_1']
classes.remove(latin_1)
for r in ranges:
assert not TransitionKey.__is_unique_range(r)
« no previous file with comments | « tools/lexer_generator/lexer_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698