Not a kernel guy

… in the Windows kernel team

Wednesday, August 22, 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')

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

Posted at 9:57 am •

Tuesday, August 21, 2007

DParser vs. PLY

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

DParser profiling

PS. Под профайлером разница меньше, - раз шесть всего, но тоже впечатляет.

Posted at 4:18 pm •

Monday, August 20, 2007

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;
}

(more…)

Posted at 10:25 am •

Friday, August 17, 2007

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

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

(more…)

Posted at 11:22 am •

Thursday, August 16, 2007

Парсер C кода.

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

(more…)

Posted at 2:36 pm •

Sunday, August 12, 2007

Win32.Utf8.

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

(more…)

Posted at 10:40 pm •

Wednesday, August 8, 2007

Подъём!

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

STS-118 lifts off

(more…)

Posted at 7:15 pm •
« Previous PageNext Page »

Powered by WordPress