Главная » Просмотр файлов » Искусство программирования на Си

Искусство программирования на Си (984073), страница 66

Файл №984073 Искусство программирования на Си (Искусство программирования на Си) 66 страницаИскусство программирования на Си (984073) страница 662015-07-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 66)

Хотелось бы за- гаШе ареегдгег ° йввх Я 35 означает, что пцпх является строкой, кодать примерно следующее: торая по длине нс может превышать 35 байтов (без вресьсгегь оае от Минуточку — название библиотеки "ь)1!)я(.Ь" в ка1аг Арр11саг1олнагл (еаъг *1лд11е, еиаг аи(ссхаре<111ег учета символа конца стооки). вычках? Да, мы собираемся снова использовать коды, ьоаСС11е, 1пг орсв1а9) доабзеаресгггег Можно обеспечить любое количество спсцификато- которые разработали ранее в этой кингс. Где-то жс нуж1опсаре<111ег /* ...

*/ ров, хотя нужно помнить, что соответствующая реали- но хранить наши иерем<нные. Порядок переменных агг1вчаресг(гег ) зация не обязана поддерживать списки параметров фун- очень важен, и обязательно нужно несколько раз провя11<каресШегь кций более чем с 127 параметрами. Но такого их смотреть список переменных, чтобы сдслатьдвусвязный и позволить генератору кода позаботиться обо всем осталь-(ееасШег количества должно быть достаточно.

список более подходящим. Поэтому следует снова найноч Конечно, аргументы функции Арр))са()опМаш() Если мы задали генератору кода вхолныс данные ти и использовать библиотеку, которая была разработабудут разными е разных программах. Это неулобно Мо- еоебьеарес111егь этого примера, мы хотели бы использовать их для про- на в главе 1!.

жст ли в решении этой проблемы помо )ь сам генератор ааеаШ>ег О изводства кода, который считывает и понимает строку лола? дстатитсеон ни т счот и не си не ра ива и Созданье арсирачмннсс инстр>мента.вныс средсте Часть Н1 Глава 20 имеющие состояния "включено" или "выключено") не- то получить, для чего используем функцию <йе1().

Это саве оат ЧАЕ1АВЬЕс 11(вгг1еп[дагмаве) > НАХ Хвват ЬЕН) удобны для работы, так как они не похожи на другие ловольно живучая функция, которая не позволит псре- Чагмаве = вгггок(мехГТокеп, Ое11ва); НехЕТокпп = Нпььс БГ Е ЕХ1Т РА1ЬОЕЕ" три типа. Решение разработать грамлсатику таким обра- полнить входной буфер. Этз функция обычно оставляЯеаее = ВТОР( зом принято просто с тем, чтобы показать, что и с та- ст 'лв' в коппс выхолных данных (исктюченис состав- При получении маркера от буфера данных для лучкой громоздкой грамматикой можно работать, сели дс- лают случаи, когда объем данных превышает шей работы функции а(г(ойО требуется знать, проислое1ае пать это осторожно. Может быть, вы сможете пространство для их хранения), но мы можем просто дит ли пополнение буфера.

Поэтому здесь использует- ( усовершенствовать грамматику и соответственно огре- вставить Лп' в строку ограничителей разметки. ся функция (ч<ех1ТО)сев, которая указывает на буфер Если же переменная нс является переключателем, то дактировзть синтаксический анализатор. Е(св О Г ) НОВЫХ ЛаННЫХ ИЛН НИКУда Нс УКаЗЫВаЕт, В ЗаВИСИМОСтИ гя(сНачппаеа) нужно, во-первых, сохранить копию имени псременТеперь поговорим о хранении данных.

Синтаксичес( от того, имеется ли действительно в данный момент ной, а во-вторых, изменить состояние конечного автокий анализатор должен помещать полученную инфор- Оаеа = (дега(1пВпг(, а1геог 1пВп(1„ новая информация. Функция (ч(ех(ТО(сев при получении манию в некоторого рода контейнер. Для этого потре- 1пвегеав); новых данных снова указывает на буфер данныл в на(1<вага (и НОЬЦ Между прочим, в структуре аргумента требуется бустся довольно простая конструкция. чапе цикла.

< функпия Я(гсруО Когда происхолит событие появления Если при разметке произойлет сбой, переменная ЕУР апт пегас~ АВЯОМЕНТ Хрг<пс((ьодяегеав, р р р ' р спсцифпкатора типа в отдсльнои строке ввода, название ( "Ягаеав герогг: Сог дага НачеВВ1а устанагшивается в нуль. Таким об агом фопсремсннои переписывается с помощью функции Гйе(о, спаг Наве(НАХ 1ОВНТ ЬЕН)1 аауп мально регистрируется ошибка в начале цикла, который поэтому такое событие нужно по возможности псрехвагпе ТУРе( 1пВп(1); после э сото получит некоторыс дополнительные ланныс вгге Г Ьеп; /' (ог вгггпдв */ Начеоага = 1; для своей работы тить. Аяооментс НЕХГТОХЕП = 1ПВП(11 еегсру(агд.нате, чагнтае)с ) гг(уагвавп == ЗПЛЫ Яеасе = 6ЕТ ТХРЕ; гпе Рагаегпрпе<ОЬЫят *нагдщаг, еьае < Свидание присриим них и нес п рума нтаи ьних средств 6П~ — ' Допьиьните'ььние теиитинссниеравд<еи Часть Ш Глава 20 ) его происхождение.

Насколько зто нажно, мы увидим Жестко запрограммированныс здесь значения 4 и 6 Агд.яеп = О; е1яе позднее. Не забультс, что необходимо добавить коммсн- специфичны для этого приложения. В обшсм, "магичесьт(Чагтуре(а) == ятетип) ( гарни к сгенерированному коду, и в целом онн нс на- кис числа" этого вила представляют собой неудачную ( — столько важны, как в обычном коле.

Но сели в иенс- практику программирования, потому что делают проЯеаее = ВЕт ЬЕН) ) ) ) рированном коле только один комментарий, то пусть он грамму более сложной лля внесения излеснсний Олнае1яе ) сообшает слслуюшес. "Это сгенерированный исходный ко причин, по которым приходилось бы изменять эти ( Ьгеах; код". льагичсские числа, в лсйствительности нет, кроче тех ьт(ОЬ БОССЕББ )и ОЬАррепд(хгдеьяе, Ве(ап1Сь случаев, котла требуется изменить параметр синтакси- О, /* о */ Листинг 20.7. Результат генерированиа исхоДного са в программе или котла это лолжно повлечь за собой БАгд, а(хео( Агд)) Если мы встретились с йеуавИЬ то появилась прокода. рс~спсрацию кола (и, таким образом, автоматическос ( брема, поскольку состояния конечно~о автомата конт- /' агдргое.с */ обновление этих чисел).

Во всяком случае, булст отноЯеаепя = ЕХ)т РА)БОВЕ; ролируются изнутри; поэтому неизвестное состояние / Автоматвческв сгенерврованнмй файл. этот сительно просто нейтрализовать эти осложнении, если Беаее = ВТОР; характеризу ст нарушение программы. * файл вручвуп не модвфвввруйте. Вместо этого возникнет определенная причина лля беспокойства. ) * взменате депагдя.с в регевервруйте файл. е1яе аяаеее(О); /* Эеа проереииа паркмена */ */ Еоа (ТпьаАхд = 1, С<аарлед = О; ТЬ1яАхд < аедсе ( БСаее = ВТОР; (спс1пце <яецсо.в> твйапед++) ясасе = яет члктавье; Яеаее = ЕХ)т УА1ЬОЯЕ) фтпс1пде <яСЛ11Ь.Ь> Ьгеах; $1п<1пае <яег1пд.Ь> х((агдч(теьалгд))0) == Яиттее СВАЛ) ) ) ) йде(ьпе БН1ТСВ СВАВ 1((яетсмр(с-хпеегпа1', атдч(ТЬьяАгд)) == Е) Дина енитееьние темат ические ран>ееи Сн»а и не при > роме та» и нетр>мента>ними ертьене Часть )и Глава ?О зт[вгг1еп(агди[ть?вАгд)) > 255) удаление слишком затрудняло бы работу генератора ку с вызовами функции Гые(а().

чтобы сделать справоч- ПрОСтОй ГЕНЕратОр КОда кода. Готовы ли вы иметь дело с дополнительным объе- ныс сообщения более легкими для чтения. Эту часть геспгп ТЬ1влгд; мом выходного кола, в основном определяется тем, на- процссса можно у пр ти ь Мы будем снабжать г е аписанн>ю на пР'"РаммУ ь . Р Написанную на С п амм на высоком у овне можвсгсру(агдр >Ь Р 1 „[ТЬ1 А [). СКОЛЬКО ДОЛГИМ И трупным вы хотите сделать процесс ратор кола текстовым файлом, содержащим текст, ко- о те . Р Р Р Р, но разлелить на три части: директивы препроцессора, Ьгеах; разработки генератора кода. торый будет в авлен в Не[р(), так почему мы не мо- определение типов и функции. У нас сеть лвс функции, ) прсдна>наченныс для генерирования, поэтому генсражсм просто систематизировать его солсржанис так, саве Зе чтобы файл помощи был доступен во время выполне- тор кода будет сос пить из т Р то кода булет состоять из четы ех элементарных про( Ь е, >, ЦЕДУР: ОДНОЙ вЂ” ДЛЯ ЛИРСКтна ПРСПРОЦЕССОРа, ОДНОЙ— 1[(агг?еп(агди[ТЬ1влгд)) > 255) сваг е Опсы11е, ния программы'! Г[роблсма с таким решением состоит ( сьаг Ьодв11е, е в точ, что файл помощи предполагается доступным во для определения типов и двух — для функций.

спас ' Ые1РВ[1е)) время выполнения. А что если это нс так? Встраивая Функция УдгйеНеадегп отвечает за директивы прспро) иоЫ Ые)р(но[О); файл в генерируемый код, мы гарантируслц что текст " о>РА Порвал зада цессора. Ее первая задача состоит в том, чтобы пометить ве ру(агдр >Ые1рр11е, агди[ТЬзвАгд))) Оз~ М'р(чо")Г всегда, когда потребуется, будет доступен. результирующий кол его именем файла вместе с предупреждением о том, что код сгенсрирован автоматически. 1пс аа1п(1пе агдс, сЬаг ееагдп) ) ( Управление сопровождением Для этого, естественно, функция 5уг[(енеааег() использпг Бгаепа; зует синтаксис комментария. зпе Агдыеяп1Г; ++Соарлгд; Если вам потрсбуетсЯ внести изменениа в выхолной После этого нужно просто написать несколько опе.) АВО Агдьывс = (Е); РезУльтат генератора кола, вссгла измснайте сам гене- раторов В[Ос[оде и В[[елпе.

требуемый точный состав ) Ратор, а нс Результирующий кол. Если же вы измените этих операторов булет разным в различных генераторах. Агдвеап11 = СеЕАгдв(агдс, агди, САгдй(ае); 1((лгдвевп11 )м О) рсзультируюгдий код, то эти изменения потеряются, Вполне может оказаться, что вы вообще не захотите Создание ароерзимиыз инструмаваалониг средств нее кое раздели Глава 20 лепсо создать тип АКВЬ Для этого нужно организовать Бые (.

Хотя это целый тип без знака, однако мы не знаем Соарагдв = ОЬСеппе(хгдшве) — Оргхгдвз обычный цикл по списку. точно, какого он вида, поэтому перед передачей его Особенно следует позаботиться о двух моментах в функции Урйп((() нужно выполнить приведение типа. случае использования константы ВТК!(и(О. Первое, <то Пользователи мэйнфреймовских машин в зависимо- Нашси первой задачей является генерирование оп- надо сделать — это вьшслить для ВТКП'(О большее зна- сти от того, насколько полноценно их программное ределсния функции.

Он будет передан агкс и агйт из ченис, чем то, которое хранится синтаксическим ана- обеспечение эмуляции терминала, могут заменять функции пш(пО вместе с указателем на структуру АКО. лизатором, для размещения символа конца строки. Во- "сьаг%5[%в];'хп" на "сьаг%5??(%ц??);хп". Как только станет известно, что имеются обязательные вторых, указанное значение содержится в переменной гргьпст(опгБггеаа, (пг Иг(оетуреде((ГЬЬЕ Опевегеав, ОЬЫБт вагдЫвс) (пс Оегагдв(ьпе агдс, ( сЬаг *вагди, АВО *егер)хп ): Ааооивит *А 1; (ргьпет(опгвггеаа, ((п"); (рггпет(опсвггеав, гпг ть1вагд;зп ); (рг1пет(оп15егеаа, гуредет вЬгпсг 5561п(1п'); (рг(пег(опеэгге 1пг соврагд (п ) тргьпет(опСБггеав, (п ); яЬьье(АгдЫвг) Грг(пет(опеэггеав, 1((агдс <= ад)1п , СоарАгда); грг(пет(онсвсгеав, (1п ); Агд = ОЬОесваса(дгдЫвс, ВОЬЬ, БОЬЬ)г Грггпгт(опгвегеав, ' гесагп -1;1п )г трг(пет(опгвггеав, )1п ); Грг1пьт(опевегеав, ")Г грг(пег(опевггеаа, ' и(агдс > вд) (п , соврагдв + Ореагдв + 1); Гргзпс((Опевегеаа, (1п ); аргументы СошрАгйя необязательные аргументы Ор(Агй, несложно будет сгенерировать код для определения того, достаточно ли аргументов и не слишком ли их много.

Рассмотрев в первую очередь эти вопросы, мы можем сконцентрироваться на более глубоких задачах проверки самих аргументов. 5еаге = ОЬОаст1гае [Агдогае) д]илсззнюлееьные тслитинесниераздезы Ссзздансзе лрасраыинесс инструиентин.ныз средсте Часть (й Глава 20 Поскольку неопознанные аргументы будут обраба- (рг(пе((опевегеав, (ргзпе1(оосвегеав, ая )зп 'аа (1(впз]рсг 1пдепс)] тываться с помошью е]зс, имеет смысл использовать син- ая (уп 1пиепе)з агди[ТЬ(авгд])уп', таксис конструкшзи ][.../ е]яе зГ.../ е[зе ([.../ е[яе, с кото1пдепе)] ++Тбтасоврвгд] рой легко производить итерации. Даже при отсутствии В этой главе лзы уже обсуждали лозкнос с первого ) опрслслснного по умолчанию условия, это, скорее все- взгляда открытие фигурной скобки.

Характеристики

Тип файла
DJVU-файл
Размер
12,26 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
310
Средний доход
с одного платного файла
Обучение Подробнее