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

Unified Diff: tools/lexer_generator/transition_keys.py

Issue 137883006: Experimental parser: use Terms instead of tuples (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 6 years, 11 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/transition_key_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 33019b99a09ba92c78244a84553debdc265ec1d4..165ad98f13786ce5ebe9ca19af1b1f0f37903d1d 100644
--- a/tools/lexer_generator/transition_keys.py
+++ b/tools/lexer_generator/transition_keys.py
@@ -182,17 +182,18 @@ class TransitionKey(object):
return TransitionKey.__cached_key(None, name, get_bounds)
@staticmethod
- def __process_graph(encoding, graph, ranges, key_map):
- key = graph[0]
+ def __process_term(encoding, term, ranges, key_map):
+ key = term.name()
+ args = term.args()
if key == 'RANGE':
- ranges.append((ord(graph[1]), ord(graph[2])))
+ ranges.append((ord(args[0]), ord(args[1])))
elif key == 'LITERAL':
- ranges.append((ord(graph[1]), ord(graph[1])))
+ ranges.append((ord(args[0]), ord(args[0])))
elif key == 'CAT':
- for x in [graph[1], graph[2]]:
- TransitionKey.__process_graph(encoding, x, ranges, key_map)
+ for x in [args[0], args[1]]:
+ TransitionKey.__process_term(encoding, x, ranges, key_map)
elif key == 'CHARACTER_CLASS':
- class_name = graph[1]
+ class_name = args[0]
if encoding.class_range(class_name):
r = encoding.class_range(class_name)
if class_name in key_map:
@@ -206,13 +207,13 @@ class TransitionKey(object):
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]' % args[0])
else:
raise Exception('bad key [%s]' % key)
@staticmethod
- def character_class(encoding, graph, key_map):
- '''Processes 'graph' (a representation of a character class in the rule
+ def character_class(encoding, term, key_map):
+ '''Processes 'term' (a representation of a character class in the rule
file), and constructs a TransitionKey based on it. 'key_map' contains
already constructed aliases for character classes (they can be used in the
new character class). It is a map from strings (character class names) to
@@ -220,9 +221,10 @@ class TransitionKey(object):
[a-z:digit:] where 'digit' is a previously constructed character class found
in "key_map".'''
ranges = []
- assert graph[0] == 'CLASS' or graph[0] == 'NOT_CLASS'
- invert = graph[0] == 'NOT_CLASS'
- TransitionKey.__process_graph(encoding, graph[1], ranges, key_map)
+ assert term.name() == 'CLASS' or term.name() == 'NOT_CLASS'
+ invert = term.name() == 'NOT_CLASS'
+ assert len(term.args()) == 1
+ TransitionKey.__process_term(encoding, term.args()[0], ranges, key_map)
return TransitionKey.__key_from_ranges(encoding, invert, ranges)
def matches_char(self, char):
« no previous file with comments | « tools/lexer_generator/transition_key_test.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698