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

Стандартный обработчик пробелов в 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') Из интересного тут только само регулярное выражение. Мне понадобилось н-дцать попыток, чтобы довести его до ума. Read On →

DParser vs. PLY

Переделал разбор С заголовков на DParser – получил ускорение в 10 раз. Мелочь, а приятно. :-) PS. Под профайлером разница меньше, - раз шесть всего, но тоже впечатляет.

sizeof(void) == 1

Наткнулся на забавную вещь. Вот такой код спокойно компилируется GCC (версия 3.4.2 (mingw-special)):

#include <stdio.h>

int main()
{
    void* ptr;

    printf("sizeof(void): %d\\n", sizeof(void));

    ptr = 0;
    printf("before increment: %p\\n", ptr);
    ptr += 1;
    printf("after increment: %p\\n", ptr);

    return 0;
}
Read On →

Первый блин - комом

Нахваливал я тут PLY, а зря. Разбор двух с половиной мегабайтного заголовка с построением синтаксического дерева занимает верных полторы минуты. И это на AMD Opteron 250 2.4GHz. Эталонный Althon XP, по всей видимости, будет делать то же самое минут десять. Это никуда не годиться.

Read On →

Парсер C кода

Поиск парсера для C кода – по-прежнему увлекательное занятие. Для Win32.Utf8 мне нужен был парсер для анализа заголовочных файлов Win32 API и извлечения из них прототипов функций и объявлений структур. Требований к нему было не очень много:

Read On →

Win32.Utf8

Я тут совсем недавно удивлялся почему нет библиотек, эмулирующих поддержку UTF-8 на уровне Win32 API. Т.е. такая библиотека реализует, скажем, CreateFileUtf8 в дополнение к предлагаемым системой CreateFileA и CreateFileW, а макрос CreateFile будет выбирать нужную реализацию уже из трех вариантов. Надо сказать, что по итогам обсуждения моё недоумение нисколько не уменьшилось. Даже ссылки на Michael Caplan - авторитета в этой области не помогли. Это, впрочем, как раз очень понятно. Набивать свои шишки куда как интереснее, чем послушать что говорят умные люди уже ходившие по этим граблям. :-)

Read On →

Подъём!

Сегодня запустили Эндевор.

STS-118 lifts off

Read On →

Regedit

На моей машине в папке «%windir%» можно найти 6 (шесть!) копий «regedit.exe».

regedit.exe

Что это? Опять коварный Microsoft? Не совсем так. Просто Regedit несколько раз менял свое положение в дереве каталогов.

Read On →

Переезд 2

Фух! Наконец-то с переездом покончено. В этот раз как никогда прочувствовал верность первого закона создания динамики систем Зимерги: «Если уж вы открыли банку с червями, то единственный способ снова их запечатать - это воспользоваться банкой большего размера».

Переезд

Если верить фразе «два переезда эквивалентны одному пожару», то за последние 6 лет я горел два раза (или три – это как посчитать). Причем если в начале это был маленький костерок, то со временем это начинает походить на настоящий пожар. Количество ненужного хлама очень нужных и полезных в хозяйстве вещей растет бешенными темпами. Откуда только берется?

Read On →