Регулярное выражение. Симпатишное :-)
Aug 22, 2007 · CommentsWin32.Utf8
Стандартный обработчик пробелов в DParser распознаёт пробелы, табуляцию, переводы строк, C-подобные комментарии и директивы “#line”. Мне нужно было отсеивать ещё и “#pragma” директивы, которые препроцессор от Visual C++ любезно оставляет в коде. Для этого понадобилось определить свой обработчик пробельных символов:
re_whitespace =
re.compile(r'(\\s+|/\\*(.|\\n)*?\\*/|//.*\\n|(^\\s*\\#.*$((?<=\\\\)\\n.*$)*))+', re.M)
def whitespace(loc):
m = re_whitespace.match(loc.buf, loc.s)
if m:
loc.s = m.end()
loc.line += m.group().count('\\n')
Из интересного тут только само регулярное выражение. Мне понадобилось н-дцать попыток, чтобы довести его до ума. :-)