Skip to content

Commit 156eae7

Browse files
Explicit error for comments, with README link (#569)
* Explicit error for comments, with user hint * naming, README * adding tests * Remove reference to current clang behavior
1 parent 2215299 commit 156eae7

File tree

4 files changed

+21
-3
lines changed

4 files changed

+21
-3
lines changed

README.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ Interaction with the C preprocessor
110110
-----------------------------------
111111

112112
In order to be compilable, C code must be preprocessed by the C preprocessor -
113-
``cpp``. ``cpp`` handles preprocessing directives like ``#include`` and
113+
``cpp``. A compatible ``cpp`` handles preprocessing directives like ``#include`` and
114114
``#define``, removes comments, and performs other minor tasks that prepare the C
115115
code for compilation.
116116

pycparser/c_lexer.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ def _make_tok_location(self, token):
209209

210210
bad_octal_constant = '0[0-7]*[89]'
211211

212+
# comments are not supported
213+
unsupported_c_style_comment = r'\/\*'
214+
unsupported_cxx_style_comment = r'\/\/'
215+
212216
# character constants (K&R2: A.2.5.2)
213217
# Note: a-zA-Z and '.-~^_!=&;,' are allowed as escape chars to support #line
214218
# directives with Windows paths as filenames (..\..\dir\file)
@@ -475,6 +479,16 @@ def t_BAD_CONST_OCT(self, t):
475479
msg = "Invalid octal constant"
476480
self._error(msg, t)
477481

482+
@TOKEN(unsupported_c_style_comment)
483+
def t_UNSUPPORTED_C_STYLE_COMMENT(self, t):
484+
msg = "Comments are not supported, see https://github.com/eliben/pycparser#3using."
485+
self._error(msg, t)
486+
487+
@TOKEN(unsupported_cxx_style_comment)
488+
def t_UNSUPPORTED_CXX_STYLE_COMMENT(self, t):
489+
msg = "Comments are not supported, see https://github.com/eliben/pycparser#3using."
490+
self._error(msg, t)
491+
478492
@TOKEN(octal_constant)
479493
def t_INT_CONST_OCT(self, t):
480494
return t

tests/README.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
Run 'python -m unittest discover' from the root pycparser directory
1+
Run 'python3 -m unittest discover' from the root repository directory.

tests/test_c_lexer.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,11 +418,12 @@ def test_preprocessor_pragma(self):
418418
ERR_FILENAME_BEFORE_LINE = 'filename before line'
419419
ERR_LINENUM_MISSING = 'line number missing'
420420
ERR_INVALID_LINE_DIRECTIVE = 'invalid #line directive'
421+
ERR_COMMENT = 'Comments are not supported'
421422

422423

423424
class TestCLexerErrors(unittest.TestCase):
424425
""" Test lexing of erroneous strings.
425-
Works by passing an error functions that saves the error
426+
Works by passing an error function that saves the error
426427
in an attribute for later perusal.
427428
"""
428429
def error_func(self, msg, line, column):
@@ -496,6 +497,9 @@ def test_preprocessor(self):
496497
self.assertLexerError('#line "ka"', ERR_FILENAME_BEFORE_LINE)
497498
self.assertLexerError('#line df', ERR_INVALID_LINE_DIRECTIVE)
498499
self.assertLexerError('#line \n', ERR_LINENUM_MISSING)
500+
# a compatible preprocessor must remove comments.
501+
self.assertLexerError('//', ERR_COMMENT)
502+
self.assertLexerError('/*', ERR_COMMENT)
499503

500504

501505
if __name__ == '__main__':

0 commit comments

Comments
 (0)