| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import re | 5 import re |
| 6 import sys | 6 import sys |
| 7 import os.path | 7 import os.path |
| 8 | 8 |
| 9 # Try to load the ply module, if not, then assume it is in the third_party | 9 # Try to load the ply module, if not, then assume it is in the third_party |
| 10 # directory. | 10 # directory. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 ## | 71 ## |
| 72 ## All the tokens recognized by the lexer | 72 ## All the tokens recognized by the lexer |
| 73 ## | 73 ## |
| 74 tokens = keywords + ( | 74 tokens = keywords + ( |
| 75 # Identifiers | 75 # Identifiers |
| 76 'NAME', | 76 'NAME', |
| 77 | 77 |
| 78 # Constants | 78 # Constants |
| 79 'ORDINAL', | 79 'ORDINAL', |
| 80 'INT_CONST_DEC', 'INT_CONST_OCT', 'INT_CONST_HEX', | 80 'INT_CONST_DEC', 'INT_CONST_OCT', 'INT_CONST_HEX', |
| 81 'FLOAT_CONST', 'HEX_FLOAT_CONST', | 81 'FLOAT_CONST', |
| 82 'CHAR_CONST', | 82 'CHAR_CONST', |
| 83 | 83 |
| 84 # String literals | 84 # String literals |
| 85 'STRING_LITERAL', | 85 'STRING_LITERAL', |
| 86 | 86 |
| 87 # Operators | 87 # Operators |
| 88 'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD', | 88 'PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'MOD', |
| 89 'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT', | 89 'OR', 'AND', 'NOT', 'XOR', 'LSHIFT', 'RSHIFT', |
| 90 | 90 |
| 91 # Assignment | 91 # Assignment |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 # string literals (K&R2: A.2.6) | 147 # string literals (K&R2: A.2.6) |
| 148 string_char = r"""([^"\\\n]|"""+escape_sequence+')' | 148 string_char = r"""([^"\\\n]|"""+escape_sequence+')' |
| 149 string_literal = '"'+string_char+'*"' | 149 string_literal = '"'+string_char+'*"' |
| 150 bad_string_literal = '"'+string_char+'*'+bad_escape+string_char+'*"' | 150 bad_string_literal = '"'+string_char+'*'+bad_escape+string_char+'*"' |
| 151 | 151 |
| 152 # floating constants (K&R2: A.2.5.3) | 152 # floating constants (K&R2: A.2.5.3) |
| 153 exponent_part = r"""([eE][-+]?[0-9]+)""" | 153 exponent_part = r"""([eE][-+]?[0-9]+)""" |
| 154 fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)""" | 154 fractional_constant = r"""([0-9]*\.[0-9]+)|([0-9]+\.)""" |
| 155 floating_constant = \ | 155 floating_constant = \ |
| 156 '(((('+fractional_constant+')'+ \ | 156 '(((('+fractional_constant+')'+ \ |
| 157 exponent_part+'?)|([0-9]+'+exponent_part+'))[FfLl]?)' | 157 exponent_part+'?)|([0-9]+'+exponent_part+')))' |
| 158 binary_exponent_part = r'''([pP][+-]?[0-9]+)''' | |
| 159 hex_fractional_constant = \ | |
| 160 '((('+hex_digits+r""")?\."""+hex_digits+')|('+hex_digits+r"""\.))""" | |
| 161 hex_floating_constant = \ | |
| 162 '('+hex_prefix+'('+hex_digits+'|'+hex_fractional_constant+')'+ \ | |
| 163 binary_exponent_part+'[FfLl]?)' | |
| 164 | 158 |
| 165 # Ordinals | 159 # Ordinals |
| 166 ordinal = r'@[0-9]+' | 160 ordinal = r'@[0-9]+' |
| 167 missing_ordinal_value = r'@' | 161 missing_ordinal_value = r'@' |
| 168 # Don't allow ordinal values in octal (even invalid octal, like 09) or | 162 # Don't allow ordinal values in octal (even invalid octal, like 09) or |
| 169 # hexadecimal. | 163 # hexadecimal. |
| 170 octal_or_hex_ordinal_disallowed = r'@((0[0-9]+)|('+hex_prefix+hex_digits+'))' | 164 octal_or_hex_ordinal_disallowed = r'@((0[0-9]+)|('+hex_prefix+hex_digits+'))' |
| 171 | 165 |
| 172 ## | 166 ## |
| 173 ## Rules for the normal state | 167 ## Rules for the normal state |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 209 |
| 216 # The following floating and integer constants are defined as | 210 # The following floating and integer constants are defined as |
| 217 # functions to impose a strict order (otherwise, decimal | 211 # functions to impose a strict order (otherwise, decimal |
| 218 # is placed before the others because its regex is longer, | 212 # is placed before the others because its regex is longer, |
| 219 # and this is bad) | 213 # and this is bad) |
| 220 # | 214 # |
| 221 @TOKEN(floating_constant) | 215 @TOKEN(floating_constant) |
| 222 def t_FLOAT_CONST(self, t): | 216 def t_FLOAT_CONST(self, t): |
| 223 return t | 217 return t |
| 224 | 218 |
| 225 @TOKEN(hex_floating_constant) | |
| 226 def t_HEX_FLOAT_CONST(self, t): | |
| 227 return t | |
| 228 | |
| 229 @TOKEN(hex_constant) | 219 @TOKEN(hex_constant) |
| 230 def t_INT_CONST_HEX(self, t): | 220 def t_INT_CONST_HEX(self, t): |
| 231 return t | 221 return t |
| 232 | 222 |
| 233 @TOKEN(bad_octal_constant) | 223 @TOKEN(bad_octal_constant) |
| 234 def t_BAD_CONST_OCT(self, t): | 224 def t_BAD_CONST_OCT(self, t): |
| 235 msg = "Invalid octal constant" | 225 msg = "Invalid octal constant" |
| 236 self._error(msg, t) | 226 self._error(msg, t) |
| 237 | 227 |
| 238 @TOKEN(octal_constant) | 228 @TOKEN(octal_constant) |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 return t | 278 return t |
| 289 | 279 |
| 290 # Ignore C and C++ style comments | 280 # Ignore C and C++ style comments |
| 291 def t_COMMENT(self, t): | 281 def t_COMMENT(self, t): |
| 292 r'(/\*(.|\n)*?\*/)|(//.*(\n[ \t]*//.*)*)' | 282 r'(/\*(.|\n)*?\*/)|(//.*(\n[ \t]*//.*)*)' |
| 293 pass | 283 pass |
| 294 | 284 |
| 295 def t_error(self, t): | 285 def t_error(self, t): |
| 296 msg = 'Illegal character %s' % repr(t.value[0]) | 286 msg = 'Illegal character %s' % repr(t.value[0]) |
| 297 self._error(msg, t) | 287 self._error(msg, t) |
| OLD | NEW |