Регулярное выражение. Симпатишное :-).

August 22nd, 2007

Стандартный обработчик пробелов в 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')

Из интересного тут только само регулярное выражение. Мне понадобилось н-дцать попыток, чтобы довести его до ума. :-)

  1. Left2
    August 22nd, 2007 at 13:37 | #1

    Напомнило: это не ascii-art, это regexp….

  2. August 22nd, 2007 at 14:07 | #2

    Только что заметил, что под IE7 пропадают отступы в коде. :-/ Надо бы разобраться почему…

  3. Alex
    August 22nd, 2007 at 23:01 | #3

    Ну на то они и “регулярки”. Парадигма программирования. Написать их можно, но частенько другой человек задаётся вопросом: “Что тут написано?” , и уже потом: “Зачем это нужно?”. Однако экономия времени потрясающая.

  4. Anonymous
    August 22nd, 2007 at 23:18 | #4

    #define получается тоже отсеивается?

  5. August 22nd, 2007 at 23:19 | #5

    Мне кажется, что из всех широко употребляемых технологий, регулярные выражения выходят из ряда вон благодаря своему антигуманному синтаксису. Никто не знает, существуют ли в природе “визуализаторы-объяснятели” регулярных выражений, чтобы вводишь в него строку, а он её в человеко-легко-перевариваемый вид… а?

  6. August 22nd, 2007 at 23:21 | #6

    Вроде бы, “#define” ещё препроцессором должен того….

  7. August 22nd, 2007 at 23:24 | #7

     

    #define получается тоже отсеивается?

    Режуться всё директивы препроцессора и #define в том числе. Просто к моменту когда используется это выражение в коде от препроцессора остаются только #pragma и #line.

  8. August 23rd, 2007 at 00:00 | #8

     

    Никто не знает, существуют ли в природе “визуализаторы-объяснятели” регулярных выражений, чтобы вводишь в него строку, а он её в человеко-легко-перевариваемый вид… а?

    Я дома пользуюсь KRegExpEditor’ом. Сильно помогает отлаживать regexp’ы в особо запущенных случаях. Всё никак не могу найти такую же штуку под Windows.

  9. Alex
    August 23rd, 2007 at 00:38 | #9

    Под Windows пользую
    PCRE Workbench
    http://www.renatomancuso.com/software/pcreworkbench/pcreworkbench.htm

  1. August 22nd, 2007 at 10:00 | #1