Стандартный обработчик пробелов в 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')
Из интересного тут только само регулярное выражение. Мне понадобилось н-дцать попыток, чтобы довести его до ума.
Win32.Utf8
Переделал разбор С заголовков на DParser – получил ускорение в 10 раз. Мелочь, а приятно.
PS. Под профайлером разница меньше, – раз шесть всего, но тоже впечатляет.
Win32.Utf8
Наткнулся на забавную вещь. Вот такой код спокойно компилируется 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 more…
C/C++, Программирование
Нахваливал я тут PLY, а зря. Разбор двух с половиной мегабайтного заголовка с построением синтаксического дерева занимает верных полторы минуты. И это на AMD Opteron 250 2.4GHz. Эталонный Althon XP, по всей видимости, будет делать то же самое минут десять. Это никуда не годиться.
Read more…
Win32.Utf8
Поиск парсера для C кода – по-прежнему увлекательное занятие. Для Win32.Utf8 мне нужен был парсер для анализа заголовочных файлов Win32 API и извлечения из них прототипов функций и объявлений структур. Требований к нему было не очень много:
Read more…
Программирование, Win32.Utf8
Я тут совсем недавно удивлялся почему нет библиотек, эмулирующих поддержку UTF-8 на уровне Win32 API. Т.е. такая библиотека реализует, скажем, CreateFileUtf8 в дополнение к предлагаемым системой CreateFileA и CreateFileW, а макрос CreateFile будет выбирать нужную реализацию уже из трех вариантов. Надо сказать, что по итогам обсуждения моё недоумение нисколько не уменьшилось. Даже ссылки на Michael Caplan – авторитета в этой области не помогли. Это, впрочем, как раз очень понятно. Набивать свои шишки куда как интереснее, чем послушать что говорят умные люди уже ходившие по этим граблям.
Read more…
Win32.Utf8
Recent Comments