diff options
author | eliben <eliben@gmail.com> | 2012-08-10 08:24:28 +0300 |
---|---|---|
committer | eliben <eliben@gmail.com> | 2012-08-10 08:24:28 +0300 |
commit | e40ae0a602b6dcbaca92555c82bff4e743ac2950 (patch) | |
tree | 995f5ba756cd8ebf5e581a5caad06217842d987f /pycparser/c_lexer.py | |
parent | 04b0c217fb15be0d281d3d60205cdc52920cb716 (diff) | |
download | pycparser-e40ae0a602b6dcbaca92555c82bff4e743ac2950.tar.gz |
Fixes for issue 74: pass decimal escapes \<num> in the lexer
Diffstat (limited to 'pycparser/c_lexer.py')
-rw-r--r-- | pycparser/c_lexer.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/pycparser/c_lexer.py b/pycparser/c_lexer.py index 45509aa..0406af9 100644 --- a/pycparser/c_lexer.py +++ b/pycparser/c_lexer.py @@ -187,13 +187,16 @@ class CLexer(object): # character constants (K&R2: A.2.5.2) # Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line # directives with Windows paths as filenames (..\..\dir\file) + # For the same reason, decimal_escape allows all digit sequences. We want to + # parse all correct code, even if it means to sometimes parse incorrect + # code. # simple_escape = r"""([a-zA-Z._~!=&\^\-\\?'"])""" - octal_escape = r"""([0-7]{1,3})""" + decimal_escape = r"""(\d+)""" hex_escape = r"""(x[0-9a-fA-F]+)""" bad_escape = r"""([\\][^a-zA-Z._~^!=&\^\-\\?'"x0-7])""" - escape_sequence = r"""(\\("""+simple_escape+'|'+octal_escape+'|'+hex_escape+'))' + escape_sequence = r"""(\\("""+simple_escape+'|'+decimal_escape+'|'+hex_escape+'))' cconst_char = r"""([^'\\\n]|"""+escape_sequence+')' char_const = "'"+cconst_char+"'" wchar_const = 'L'+char_const |