diff options
author | David Beazley <dave@dabeaz.com> | 2012-10-15 07:00:21 -0500 |
---|---|---|
committer | David Beazley <dave@dabeaz.com> | 2012-10-15 07:00:21 -0500 |
commit | 6437a744b6c5cf885cb7e4a01efc9c1b17582675 (patch) | |
tree | e2a58a7a43684f7ee7ef3d9610ede6a9fb72d3b2 /ply | |
parent | d761e0a914110e0eda798913723ac16ae8aff90f (diff) | |
download | ply-6437a744b6c5cf885cb7e4a01efc9c1b17582675.tar.gz |
Fixed whitespace handling in comments
Diffstat (limited to 'ply')
-rw-r--r-- | ply/cpp.py | 20 |
1 files changed, 15 insertions, 5 deletions
@@ -15,7 +15,7 @@ from __future__ import generators # ----------------------------------------------------------------------------- tokens = ( - 'CPP_ID','CPP_INTEGER', 'CPP_FLOAT', 'CPP_STRING', 'CPP_CHAR', 'CPP_WS', 'CPP_COMMENT', 'CPP_POUND','CPP_DPOUND' + 'CPP_ID','CPP_INTEGER', 'CPP_FLOAT', 'CPP_STRING', 'CPP_CHAR', 'CPP_WS', 'CPP_COMMENT1', 'CPP_COMMENT2', 'CPP_POUND','CPP_DPOUND' ) literals = "+-*/%|&~^<>=!?()[]{}.,;:\\\'\"" @@ -55,10 +55,19 @@ def t_CPP_CHAR(t): return t # Comment -def t_CPP_COMMENT(t): - r'(/\*(.|\n)*?\*/)|(//.*?\n)' - t.lexer.lineno += t.value.count("\n") +def t_CPP_COMMENT1(t): + r'(/\*(.|\n)*?\*/)' + ncr = t.value.count("\n") + t.lexer.lineno += ncr + # replace with one space or a number of '\n' + t.type = 'CPP_WS'; t.value = '\n' * ncr if ncr else ' ' return t + +# Line comment +def t_CPP_COMMENT2(t): + r'(//.*?(\n|$))' + # replace with '/n' + t.type = 'CPP_WS'; t.value = '\n' def t_error(t): t.type = t.value[0] @@ -614,8 +623,9 @@ class Preprocessor(object): if tok.value == '#': # Preprocessor directive + # insert necessary whitespace instead of eaten tokens for tok in x: - if tok in self.t_WS and '\n' in tok.value: + if tok.type in self.t_WS and '\n' in tok.value: chunk.append(tok) dirtokens = self.tokenstrip(x[i+1:]) |