summaryrefslogtreecommitdiff
path: root/pycparser/c_lexer.py
diff options
context:
space:
mode:
authoreliben <eliben@gmail.com>2012-08-10 08:24:28 +0300
committereliben <eliben@gmail.com>2012-08-10 08:24:28 +0300
commite40ae0a602b6dcbaca92555c82bff4e743ac2950 (patch)
tree995f5ba756cd8ebf5e581a5caad06217842d987f /pycparser/c_lexer.py
parent04b0c217fb15be0d281d3d60205cdc52920cb716 (diff)
downloadpycparser-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.py7
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