Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.09.2011, 13:29   #1
VelSyd
Новичок
Джуниор
 
Регистрация: 23.09.2011
Сообщений: 3
По умолчанию РБНФ

Здравствуйте. Сразу извиняюсь если не туда запостил. Мне поставлена задача

Постройте грамматику, описывающую структуру российских почтовых адресов, которой бы удовлетворяли приведенные ниже адреса, и запишите ее в нотации EBNF. Описание нотации и примеры записи по ссылке: http://en.wikipedia.org/wiki/Extende...80%93Naur_Form

Почтовые адреса:
197738, Россия, Ленинградская область, Репино, Цветочный переулок, 6
194295, Россия, г. Санкт-Петербург, улица Ивана Фомина, 10к2
234223, Россия, Нижегородская область, г. Нижний Новгород, ул. Политотдельская, 32
140120, Россия, Московская область, Раменский район, хутор Ильинский, улица Наты Бабушкиной, 77
140120, Россия, Московская область, Раменский р-н, х-р Ильинский, 3-й Октябрьский пер., 3а
142403, Россия, Московская область, Ногинский район, г. Ногинск Больничный проезд, 6
347900, Россия, Ростовская область, Таганрог, улица Нижняя Линия, 295/2, корп. 3, кв. 25
347924, Россия, Ростовская область, Таганрог, 17-Й Квартальный проезд, 25, строение 2, корпус 4, квартира 110
347904, Россия, Ростовская обл, город Таганрог, 1-Я Садовая Площадка, 1
478545, Россия, Красноярский кр., г. Красноярск, пр-кт Молокова, 72г
658745, Россия, Сахалинская область, поселок Сахалинский, Петропавловское шоссе, 23-1, кв. 23
236544, Россия, Еврейская автономная область, Биробиджан, пр-кт им. Жукова, 32/3, кв 1

Сталкиваюсь с этим впервые.
Мой код

почтовый код = “индекс” “страна” [“регион”] “населённый пункт” “адрес”;
индекс = число {число};
число = цифра {цифра};
цифра = “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”;
страна = “Россия”;
регион = “название региона” “тип региона” [“район”];
название региона = буква {буква};
буква = “А” | ”Б” | ”В” | ”Г” | ”Д” | ”Е” | ”Ж” | ”З” | ”И” | ”Й” | ”К” | ”Л” | ”М” | ”Н” | ”О” | ”П” | ”Р” | ”С” | ”Т” | ”У” | ”Ф” | ”Х” | ”Ц” | ”Ч” | ”Ш” | ”Щ” | ”Ь” | ”Ы” | ”Ъ” | ”Э” | ”Ю” | ”Я;
тип региона = “область” | “край” | “обл.” | “кр.” ;
район = “название района”;
название района = буква {буква};
пункт = “название пункта” “тип пункта”;
название пункта = буква {буква};
тип пункта = “город” | ”хутор” | ”г.” | “х-р”, | “посёлок” | “ ”;
адрес = “улица” “дом” “квартира”;
улица = “название улицы” [“тип улицы”];
название улицы = буква | цифра {буква | цифра | “-” | “.”};
тип улицы = “улица” “проезд” “шоссе” “пр-кт” “пер.” “ул.” “переулок”;
дом = цифра {цифра | “/” | “-“} [“строение” ”корпус”];
строение = “номер”;
номер = цифра {цифра};
корпус = “номер”;
номер = цифра {цифра};
квартира = “номер”;
номер = цифра {цифра | буква}.

Подскажите кто может, правильно ли я делаю, если нет то что исправить.
VelSyd вне форума Ответить с цитированием
Старый 23.09.2011, 15:38   #2
VelSyd
Новичок
Джуниор
 
Регистрация: 23.09.2011
Сообщений: 3
По умолчанию

немного переделал

<почтовый код> = <индекс> <знак> <страна> <знак> [<регион> <знак>] <населенный пункт> <знак> <адрес>;
<индекс> = <число> {<число>};
<число> = <цифра> {<цифра>};
<цифра> = “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”;
<знак> = “,”;
<страна> = “Россия”;
<регион> = <название региона> <тип региона> <знак> [<район> <знак>];
<название региона> = <буква> {<буква>};
<буква> = “А” | ”Б” | ”В” | ”Г” | ”Д” | ”Е” | ”Ж” | ”З” | ”И” | ”Й” | ”К” | ”Л” | ”М” | ”Н” | ”О” | ”П” | ”Р” | ”С” | ”Т” | ”У” | ”Ф” | ”Х” | ”Ц” | ”Ч” | ”Ш” | ”Щ” | ”Ь” | ”Ы” | ”Ъ” | ”Э” | ”Ю” | ”Я;
<тип региона> = “область” | “обл.” | “кр.” ;
<район> = <название района> <тип района>;
<название района> = <буква> {<буква>};
<тип района> = “район” | “р-н”;
<населенный пункт> = <тип населенного пункта> <название населенного пункта>;
<тип населенного пункта> = “город” | ”хутор” | ”г.” | “х-р”, | “посёлок” | “ ”;
<название населённого пункта> = <буква> {<буква>};
<адрес> = <улица> <знак> <номер дома> <знак> [<строение> <знак> <корпус> <знак>] <квартира>;
<улица> = [<тип улицы>] <название улицы> | <название улицы> [<тип улицы>];
<название улицы> = <буква> | <цифра> {<буква> | <цифра> | “-” | “.”};
<тип улицы> = “улица” | “проезд” | “шоссе” | “пр-кт” | “пер.” | “ул.” | “переулок”;
<номер дома> = <цифра> {<цифра> | “/” | “-“};
<строение> = “строение” <номер строения>;
<номер строения> = <цифра> {<цифра>};
<корпус> = “корпус” <номер корпуса>;
<номер корпуса> = <цифра> {<цифра>};
<квартира> = [“квартира” | ”кв.” | “кв” ] <номер квартиры>;
<номер квартиры> = <цифра> {<цифра> | <буква>}.
VelSyd вне форума Ответить с цитированием
Старый 23.09.2011, 17:44   #3
VelSyd
Новичок
Джуниор
 
Регистрация: 23.09.2011
Сообщений: 3
По умолчанию

ещё немного подкорректировал, незнаю, думаю это должен быть окончательный вариант.

<почтовый код> = <индекс> <знак> <страна> <знак> [<регион> <знак>] <населенный пункт> <знак> <адрес>;
<индекс> = <число> {<число>};
<число> = <цифра> {<цифра>};
<цифра> = “0” | “1” | “2” | “3” | “4” | “5” | “6” | “7” | “8” | “9”;
<знак> = “,”;
<страна> = “Россия”;
<регион> = <название региона> <тип региона> <знак> [<район> <знак>];
<название региона> = <буква> {<буква>};
<буква> = “А” | ”Б” | ”В” | ”Г” | ”Д” | ”Е” | ”Ж” | ”З” | ”И” | ”Й” | ”К” | ”Л” | ”М” | ”Н” | ”О” | ”П” | ”Р” | ”С” | ”Т” | ”У” | ”Ф” | ”Х” | ”Ц” | ”Ч” | ”Ш” | ”Щ” | ”Ь” | ”Ы” | ”Ъ” | ”Э” | ”Ю” | ”Я;
<тип региона> = “область” | “обл.” | “кр.” ;
<район> = <название района> <тип района>;
<название района> = <буква> {<буква>};
<тип района> = “район” | “р-н”;
<населенный пункт> = [<тип населенного пункта>] <название населенного пункта>;
<тип населенного пункта> = “город” | ”хутор” | ”г.” | “х-р”, | “поселок”;
<название населённого пункта> = <буква> {<буква> | “-”};
<адрес> = <улица> <знак> <номер дома> [<знак> <строение>] [ <знак> <корпус>] [<знак> <квартира>];
<улица> = [<тип улицы>] <название улицы> | <название улицы> [<тип улицы>];
<название улицы> = <буква> | <цифра> {<буква> | <цифра> | “-” | “.”};
<тип улицы> = “улица” | “проезд” | “шоссе” | “пр-кт” | “пер.” | “ул.” | “переулок”;
<номер дома> = <цифра> {<цифра> | <буква> | “/” | “-“};
<строение> = <название строения> <номер строения>;
<название строения> = “строение”;
<номер строения> = <цифра> {<цифра>};
<корпус> = <название корпуса> <номер корпуса>;
<название корпуса> = “корпус”;
<номер корпуса> = <цифра> {<цифра>};
<квартира> = [“квартира” | ”кв.” | “кв” | “к”] <номер квартиры>;
<номер квартиры> = <цифра> {<цифра>}.

Попробую описать.
Здесь терминальные символы: символы "/", "-", точка, запятая, цифры от 0 до 9, буквы русского алфавита, слова "Россия", "область", "район", "город", "хутор", "поселок", "улица", "проезд", "шоссе", "переулок", "строение", "корпус", "квартира" и сокращения "обл.", "кр.", "р-н", "г.", "х-р", “пр-кт”, “пер.”, “ул.”, ”кв.”, “кв”.
Нетерминальные символы: <индекс>, <страна>, <регион>, <населенный пункт>, <адрес>.

Почтовые коды (данные здесь) можно определить через: индекс, указание страны, региона (который может быть не указан, как например в адресе 2), указания населённого пункта и адреса(и записанных через запятую).
Индекс состоит из набора цифр, цифры от 0 до 9. Страна - Россия. Нетерминальный символ регион можно определить как <название региона>, <тип региона> и <район> (который может быть не всегда указан, как например в адресах 1-3, 7-12). Название региона определим через терминальные символы - это буквы русского алфавита, тип региона - это терминальные символы либо "область" либо "обл." либо "кр.". Район можно определить через <название района> и <тип района>. Название района - представляем как буквы русского алфавита от А до Я, тип района через терминальные символы которые могут быть либо "район" либо "р-н". Населенный пункт определяем через <тип населенного пункта> (который может быть указан не всегда, как например в адресах 1,7,8,12) и <название н.п.>. Тип определяем через терминальные символы либо “город” либо ”хутор” либо ”г.” либо “х-р” либо “посёлок”. Название через буквы русского алфавита и символы "-", например Санкт-Петербург. Адрес определяем через <улицу>, <номер дома>, иногда могут быть указаны <корпус>, <строение> и квартира. Улицу определяем через <тип улицы> (который может быть не указан как в адресе 9) <название улицы>. Может быть сначала указан тип улицы, а затем название, как например в адресе 2, либо сначала название, а затем тип, как в адресе 1. Название улицы может состоять из букв русского алфавита и символов "/", ".". Тип улицы определяем через терминальные символы либо “улица” либо “проезд” либо “шоссе” либо “пр-кт” либо “пер.” либо “ул.” либо “переулок”. <номер дома> может состоять из набора цифр, букв (например 3а), символов "/", "-". Строение и корпус я представил как названия и номера. <Квартира> можно определить через терминальные символы (которые могут быть “квартира”, ”кв.”, “кв”, “к”) и номера квартиры.
Как-то так. Если кто разбирается в этом подскажите в чём я не прав.
VelSyd вне форума Ответить с цитированием
Старый 23.09.2011, 18:29   #4
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,964
По умолчанию

Вы думаете кому-нибудь, кроме Вас, интересно читать все эти три страницы сплошной галиматьи?
Вам во-фриланс надо. За денюжку люди прочтут и напишут, что надо.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск