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

Side by Side Diff: tools/lexer_generator/transition_keys.py

Issue 83243004: Experimental parser: cleanup code requiring calls to the unicode cache (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 7 years 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « tools/lexer_generator/code_generator.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 # Copyright 2013 the V8 project authors. All rights reserved. 1 # Copyright 2013 the V8 project authors. All rights reserved.
2 # Redistribution and use in source and binary forms, with or without 2 # Redistribution and use in source and binary forms, with or without
3 # modification, are permitted provided that the following conditions are 3 # modification, are permitted provided that the following conditions are
4 # met: 4 # met:
5 # 5 #
6 # * Redistributions of source code must retain the above copyright 6 # * Redistributions of source code must retain the above copyright
7 # notice, this list of conditions and the following disclaimer. 7 # notice, this list of conditions and the following disclaimer.
8 # * Redistributions in binary form must reproduce the above 8 # * Redistributions in binary form must reproduce the above
9 # copyright notice, this list of conditions and the following 9 # copyright notice, this list of conditions and the following
10 # disclaimer in the documentation and/or other materials provided 10 # disclaimer in the documentation and/or other materials provided
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 self.__lower_bound = primary_range[0] 50 self.__lower_bound = primary_range[0]
51 self.__upper_bound = primary_range[1] + len(class_names) 51 self.__upper_bound = primary_range[1] + len(class_names)
52 f = lambda i : (i + primary_range[1] + 1, i + primary_range[1] + 1) 52 f = lambda i : (i + primary_range[1] + 1, i + primary_range[1] + 1)
53 self.__class_ranges = {name : f(i) for i, name in enumerate(class_names)} 53 self.__class_ranges = {name : f(i) for i, name in enumerate(class_names)}
54 self.__predefined_ranges = {} 54 self.__predefined_ranges = {}
55 55
56 def name(self): 56 def name(self):
57 return self.__name 57 return self.__name
58 58
59 def add_predefined_range(self, name, ranges): 59 def add_predefined_range(self, name, ranges):
60 # TODO verify disjointness
61 self.__predefined_ranges[name] = ranges 60 self.__predefined_ranges[name] = ranges
62 61
63 def lower_bound(self): 62 def lower_bound(self):
64 return self.__lower_bound 63 return self.__lower_bound
65 64
66 def upper_bound(self): 65 def upper_bound(self):
67 return self.__upper_bound 66 return self.__upper_bound
68 67
69 def primary_range(self): 68 def primary_range(self):
70 return self.__primary_range 69 return self.__primary_range
71 70
72 def class_range(self, name): 71 def class_range(self, name):
73 ranges = self.__class_ranges 72 ranges = self.__class_ranges
74 return None if not name in ranges else ranges[name] 73 return None if not name in ranges else ranges[name]
75 74
76 def class_range_iter(self): 75 def class_range_iter(self):
77 return self.__class_ranges.iteritems() 76 return self.__class_ranges.iteritems()
78 77
78 def class_name_iter(self):
79 return self.__class_ranges.iterkeys()
80
79 def class_value_iter(self): 81 def class_value_iter(self):
80 return self.__class_ranges.itervalues() 82 return self.__class_ranges.itervalues()
81 83
82 def predefined_range_iter(self, name): 84 def predefined_range_iter(self, name):
83 ranges = self.__predefined_ranges 85 ranges = self.__predefined_ranges
84 return None if not name in ranges else iter(ranges[name]) 86 return None if not name in ranges else iter(ranges[name])
85 87
86 def is_primary_range(self, r): 88 def is_primary_range(self, r):
87 assert self.lower_bound() <= r[0] and r[1] <= self.upper_bound() 89 assert self.lower_bound() <= r[0] and r[1] <= self.upper_bound()
88 primary_range = self.__primary_range 90 primary_range = self.__primary_range
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 inverted.append((last[1] + 1, upper_bound)) 458 inverted.append((last[1] + 1, upper_bound))
457 inverted += list(classes) 459 inverted += list(classes)
458 return inverted 460 return inverted
459 461
460 class Latin1Encoding(KeyEncoding): 462 class Latin1Encoding(KeyEncoding):
461 463
462 def __init__(self): 464 def __init__(self):
463 super(Latin1Encoding, self).__init__( 465 super(Latin1Encoding, self).__init__(
464 'latin1', 466 'latin1',
465 (1, 255), 467 (1, 255),
466 ['eos', 'zero', 'byte_order_mark']) 468 ['eos', 'zero'])
467 self.add_predefined_range( 469 self.add_predefined_range(
468 'whitespace', [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160)]) 470 'whitespace', [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160)])
469 self.add_predefined_range( 471 self.add_predefined_range(
470 'letter', [ 472 'letter', [
471 (65, 90), (97, 122), (170, 170), (181, 181), 473 (65, 90), (97, 122), (170, 170), (181, 181),
472 (186, 186), (192, 214), (216, 246), (248, 255)]) 474 (186, 186), (192, 214), (216, 246), (248, 255)])
473 self.add_predefined_range('line_terminator', [(10, 10), (13, 13)]) 475 self.add_predefined_range('line_terminator', [(10, 10), (13, 13)])
474 self.add_predefined_range( 476 self.add_predefined_range(
475 'identifier_part_not_letter', [(48, 57), (95, 95)]) 477 'identifier_part_not_letter', [(48, 57), (95, 95)])
476 478
477 class Utf16Encoding(KeyEncoding): 479 class Utf16Encoding(KeyEncoding):
478 480
479 def __init__(self): 481 def __init__(self):
480 super(Utf16Encoding, self).__init__( 482 super(Utf16Encoding, self).__init__(
481 'utf16', 483 'utf16',
482 (1, 255), 484 (1, 255),
483 ['eos', 'zero', 'byte_order_mark', 485 ['eos', 'zero', 'byte_order_mark',
484 'non_latin_1_whitespace', 486 'non_primary_whitespace',
485 'non_latin_1_letter', 487 'non_primary_letter',
486 'non_latin_1_identifier_part_not_letter', 488 'non_primary_identifier_part_not_letter',
487 'non_latin_1_line_terminator', 489 'non_primary_line_terminator',
488 'non_latin_1_everything_else']) 490 'non_primary_everything_else'])
489 self.add_predefined_range( 491 self.add_predefined_range(
490 'whitespace', 492 'whitespace',
491 [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160), 493 [(9, 9), (11, 12), (32, 32), (133, 133), (160, 160),
492 self.class_range('non_latin_1_whitespace')]) 494 self.class_range('byte_order_mark'),
495 self.class_range('non_primary_whitespace')])
493 self.add_predefined_range( 496 self.add_predefined_range(
494 'letter', [ 497 'letter', [
495 (65, 90), (97, 122), (170, 170), (181, 181), 498 (65, 90), (97, 122), (170, 170), (181, 181),
496 (186, 186), (192, 214), (216, 246), (248, 255), 499 (186, 186), (192, 214), (216, 246), (248, 255),
497 self.class_range('non_latin_1_letter')]) 500 self.class_range('non_primary_letter')])
498 self.add_predefined_range( 501 self.add_predefined_range(
499 'line_terminator', 502 'line_terminator',
500 [(10, 10), (13, 13), self.class_range('non_latin_1_line_terminator')]) 503 [(10, 10), (13, 13), self.class_range('non_primary_line_terminator')])
501 self.add_predefined_range( 504 self.add_predefined_range(
502 'identifier_part_not_letter', 505 'identifier_part_not_letter',
503 [(48, 57), (95, 95), 506 [(48, 57), (95, 95),
504 self.class_range('non_latin_1_identifier_part_not_letter')]) 507 self.class_range('non_primary_identifier_part_not_letter')])
505 508
506 class Utf8Encoding(KeyEncoding): 509 class Utf8Encoding(KeyEncoding):
507 510
508 def __init__(self): 511 def __init__(self):
509 super(Utf8Encoding, self).__init__( 512 super(Utf8Encoding, self).__init__(
510 'utf8', 513 'utf8',
511 (1, 127), 514 (1, 127),
512 ['eos', 'zero', 'byte_order_mark', 515 ['eos', 'zero', 'byte_order_mark',
513 'non_ascii_whitespace', 516 'non_primary_whitespace',
514 'non_ascii_letter', 517 'non_primary_letter',
515 'non_ascii_identifier_part_not_letter', 518 'non_primary_identifier_part_not_letter',
516 'non_ascii_line_terminator', 519 'non_primary_line_terminator',
517 'non_ascii_everything_else']) 520 'non_primary_everything_else'])
518 self.add_predefined_range( 521 self.add_predefined_range(
519 'whitespace', 522 'whitespace',
520 [(9, 9), (11, 12), (32, 32), self.class_range('non_ascii_whitespace')]) 523 [(9, 9), (11, 12), (32, 32),
524 self.class_range('byte_order_mark'),
525 self.class_range('non_primary_whitespace')])
521 self.add_predefined_range( 526 self.add_predefined_range(
522 'letter', [(65, 90), (97, 122), self.class_range('non_ascii_letter')]) 527 'letter', [(65, 90), (97, 122), self.class_range('non_primary_letter')])
523 self.add_predefined_range( 528 self.add_predefined_range(
524 'line_terminator', 529 'line_terminator',
525 [(10, 10), (13, 13), self.class_range('non_ascii_line_terminator')]) 530 [(10, 10), (13, 13), self.class_range('non_primary_line_terminator')])
526 self.add_predefined_range( 531 self.add_predefined_range(
527 'identifier_part_not_letter', 532 'identifier_part_not_letter',
528 [(48, 57), (95, 95), 533 [(48, 57), (95, 95),
529 self.class_range('non_ascii_identifier_part_not_letter')]) 534 self.class_range('non_primary_identifier_part_not_letter')])
OLDNEW
« no previous file with comments | « tools/lexer_generator/code_generator.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698