Суббота, 19.05.2012, 02:30
Приветствую Вас Гость

Сайт факультета ЭВТ ВолгГТУ

Меню сайта
Форма входа
Логин:
Пароль:

Войдите, чтобы не видеть рекламу
Категории раздела
Дополнительно
Реклама


Окна ПВХ за 4774 рубля - окно пвх.
Это интересно...

Программиста и математика спрашивают:
"Что вы сделаете, чтобы вскипятить чайник?"

Ответ одинаков:
"Налью воду, поставлю чайник на плиту, включу плиту".

"А то же самое при условии, что вода в чайнике уже есть?"

Математик:
"Поставлю на плиту, включу плиту"

программист:
"Вылью воду, тогда задача сводится к предыдущей"

Поиск
Наш опрос
С какого вы курса?
Всего ответов: 459
Статистика

Онлайн всего: 2
Ныкаются: 2
Пользователей: 0
Главная » Файлы » Выполненные работы » Разное [ Добавить материал ]

Регулярное выражение: определение (инициализация) массива на языке Си (пример)

[ ] 16.09.2010, 23:22

Данное регулярное выражения находит в коде программы на языке СИ место объявления (инициализации) массива, но без учёта того, что оно может быть закоммечено или быть частью строковой константы.

В данном случае нам нужно учесть, что может быть объявлен не только простой массив, но и массив указателей (или указателей на указатели и т.п.), а также то, что может быть создан массив указателей на тип void, но массив типа void создать невозможно.

И например такого объявления тоже быть не может: int arr[10][0];

В итоге получаем вот такое регулярное выражение:

Code
(void([\s\t]*\*[\t\s]*)+|short +int|int|long +int|float|short|double|char|bool|long)[\s\t\*]*[a-zA-Z_]([a-zA-Z0-9_]){0,63}(([ \t]*\[[\s\t]*([1-9]|([0-9]{2,}))[\s\t]*\])+)[\s\t]*\;

как видите не взято во внимание разнообразие возможных типов (например unsigned int, long long и т.п.), что сделано намерено. Данный вопрос является отдельной задачей)

Похожие материалы
К сожалению, таких не нашлось

Категория: Разное | Добавил: COBA
Просмотров: 779 | Загрузок: 0 | Рейтинг: 0.0/0 |
Всего комментариев: 0

Имя *:
Email:
Код *:




Рейтинг@Mail.ru Создать сайт бесплатно