Искусство программирования на Си (984073), страница 61
Текст из файла (страница 61)
е< с - и Взвлечь вз стека и лояествть в аккумулятор А2 ПрИМЕрЫ ОбЫЧНОИ И ОбратНОИ ПОЛЬСКОИ взвпечь вз стека и поместить в аккумулятор А1 1.2< Польская нотация нотации Вмполиять сложение Правила старшинства и порядок Польская нотация [или форма записи) означает напи- В польской нотации довольно сложные выражения, В программном коде это б>лет выглядеть следующим образом требуюшие многочисленных скобок в обычной форме саине арнфн<етическил выражений без всяких скобок.
записи, сводятся к простым строкам, которые для не- Аз = а< Если исследовать операции, возможные в рассматриваПримсры выражений, результаты трансляции которых опытного глаза, однако, кажутся не столь уж просты- атасХ[[вдел+с) = А1; емом здесь воображаемом процессоре, то можно замепривсдсны выше, ясно показывают, что опсраш<и в дан- ми. Так, выражение втаск[ [вдел++) = А1; (в * (с + д) + (в + т) ч Ч) / (1 + 1) порялкс, чем это указ~но исхош<оч< выра<кении дтот ств>ют скобки А1 = атаск[1вдех--)< порялок <ависит от правил старшинства, применяемых в польской нотации превращается в следующее выражс- ь, ь донсынита!иныс анматиксскисрокдссы Скн аксинт кои тиыиз и аынискснис аырансснии ! Часть и! Глава 19 всгречаться >злы дерева.
окажется следуюшилк + ' а * ° Каждое определение синтаксиса состоит из одной вы синтаксиса. Длина кажлой такой позиции нос число подлерживаемых алыернатив во всех Ь" + с +. Если записать в этой последовательности имя "строки" (завсршаюшейся знаком лиеза и символом составляет 256 + МАХ ЯХЬ(ТАХ 1ТЕМЯ элс- правилах синтаксиса вместе взятых Каждый' элеузла, ко!да оно встретится в лсроый раз при перемеше- новой строки) ментов. Каждып элемент представляет собой мент представляет собой единственное значение нин к этому >злу вниз по дереву (например, +ааЬс), единственное значение типа сйаг, которое равно типа сйаг, которое равно (двоичном>) О или (сим- ° Каждое определение синтаксиса начинается прежтогда получится обычная польская запись.
Если же за- (двоичному) О или (символьному) значению Ъ'. вольному) зна<ению Х. Как и в таблице "Долж- де всего с имени описываемого синтаксического писать имя этого узла, когда оно встретится в носсссбясй При этом значение О свидетельств>ст о том, что но солержать", в данном случае указанные выше класса. раз при перемещении от этого >охта вверх по дереву, эта альтернатива нс должна содержать данныи значения означают, что та или иная альтсрнаы!- тогда получится обратная польская запись: аЬ*с+. Эта ° Всякое сзедуюшее после ил!сии определение синтак- конкрстныи символ или синтаксическую едини- ва или головной элемент люжет или не может надревовидная форма служит основанием для получения сиса сосгоит и! одной или более ьц!ьтернатив, при- н>, а значение Ъ' указывает обратное.
Если пер- чинаться с данного конкретного символа (для обеих нотации. Анализ обычной польскои наташ!и по- чем каждая альтернатива отделена от последующей выс 256 элементов таблицы представляют симво- первь!х 256 элементов таблицы) либо с синтакказывает, что се можно было бы назвать порядком сле- пы, тогда остальные се элеме!ыы представляют сической единицы (лля остальных элементов табдования "потомков после предков", тогда как в резуль- ° Каждая альтернатива состоит из последовательнос- синтаксичсскне единицы. лицы).
тате анализа обратной польской ногации ее мозкно было ти элементов. ° Таблица "С чего начинается". В этои таблице вы- Код распределения и построения синтаксического бы на!вать по ядком следования "предков после потом- ° Элемент представляет собой имя (г.е. имя некото- дсляется одна позиция для каждой алыернативы дерева (листинг !9.!) является зеркальным отображеникоя". У них имеются и след юшнс более фопмальные рого синтаксического класса), символьную строку, синтаксиса и сше одна позиция — для каждого го- ем кода, который освобожлает это дерево. Это означаназвания: обход в и ямом порядке и обхол в обоатном имя процедуры в крьгрых, фигурных или квадрат- ловного элемента синтаксиса.
Длина ка;клоп такой ет, что для каждой пропел>ры, которая ра смешает часть пози!дги сосгакзяс! 256+ МАХ Ях)ЧТАХ ГГЕМЯ+ синтаксического дерева, с>шествует соответствуюшая Такое описание оказывается вполне пригодным не МЛХ АЕТЕЕ)х)АТЕ 1ТЕМ8 элементов, где процсд>ра, которая освобождает ту же самую часть этого зависимо от то!о, насколько с:южным оказывается вы- ° Кажа!ай явный символ и;!и символьная строка, МАХ АЕТЕЕЬ(АТЕ 1ТЕМЯ вЂ” это максиксгсзь дерева »1 (я(гсшр(5упиахйаше,БупсалТаЫе[г[.яупгахйаве)=нО) ( )венигп ) ) ) 6Ш Лппаените»»нне тема»пинегине пи»вени ! У Синтаиеичее» й анании и начисление ануем ений $ Часта Н( ГЛава 19 ясгисх яБунсахА11 ( яхгнсс яБупсахВобу» ТЬ»яВобу; ясгисс яБупсахА11» ИехГА1С; яхгисх вЯупсахА1Г* РгеиуоияА11; вхгисс яБупхахНеаб» РагепГНеаб; (пГ 15упсахйишЬег; 1пн »А1хегпаяейишЬег; гпГ 15Гагсяй1ГЬ( ХТ [1ВЕГихнниО) (пс 1йияГСопса(п; гВехигп = СгеаяеБупсалуаЫеНпсгу ( яупсахйаше ); янгисх яБуп(ахВобу ( ) яягисГ яБупхахВобу» ИехГВобу[ гесигп (йесигп; вггисс я5упяахВобу» РгенуоняВобу; всгисг в5упхахА11' РагепГА11; ) яггисс яЯ псахНеаб» ВобуНеаб; гг сс яБу Га (пс СгеахеяупсахуаЫеНпсгу (сйаг' ряупхахйаше) сЬаг* ВобуСоисепхя; гпс (*Вобусйесй) ( иохб* ); ( 1пс 151ахня; 1пх (»Ьехсйесг) ( но(б' ); гпя (»Собебепегасе) ( ио1б» ); яхгсру(ЯупхахуаЫе()йехГБупгах).5упяахйашЕ,РБупсахйаше); гп( 15упхахйннЬег; БупсалТаЫе[(йехГБупсах).ряупяахРо1псег = ИНЬЬ; гпн 1А)хегпахейншЬег; БупяахуаЫе[(йехГЯупсах).(йияГСопна(п = О; гпс »51агсвй»ГЬ[ ЯУпсахТаЫе[1йехЬБУпяах).»БГагГЯИ»ГЬ =т,,ОЯ,, Сант и кеи чеек ии а качи> и аычис ~ение пырапкени и $ $ Глава 19 Яапппнитечиные теча пичеекиерлдепы $ ° Часть В1 1пС $НуЬехйшпЬег = -1; в=к; *1 $ ИЬ11е (БупгахЬТпе[*1]пкы ') (*Э)++' $1 ((БупСахЬгпе[')]=='(') [[ (БуптахЫпе[пд)=='(') (БупгахЫпе[*)]="'[')) ( гНуБуптахйпвЬег = РгпЕБуптахйаве ( 5упгахйаве ); $1 (БуптахТаЫе[хйуБуптахйпвЬег].рБуптахРо1птег==ИОЬЬ) ( ('Э)++ ) ) ст (хсгпсвр($5упсахЫпе[*]],*пыл= ,4)==0] $1 (гйуБупгахйпвЬег>0) БуптахТаЫе[гНу5упгахйшпЬег-1].рБуптахроспгег рйееБупеахВеаВ = ва11ос ( агхео( (БСгпсг $5упгахВеай) )1 БуптахТаЫе[1НуБуптахйовЬег).РБупСахРохпСег рйееБупгахВеа0 БСгсру(рйечБуптахВеа$)->Бупхахйаве,Бупхахйаве)$ рИеыБуптахВеад->15упеахйпвЬег = гйуБуптахйевЬег; рйеыБуптахВеаб->$5СагСей]СЬ = 0; рйеыБупгахВеай->1йппССопга]п = 0; рмееБупсахВеаб->РсгасА1сегпасе МОьь; рйееБупгахйеай->Ьехйопг1пе = МОЬЬ; рмееБупсахВеай->11еьех1са1 = РА15е; рй БуптахВеае- рй МСВеаВ = МОЬЬ; рйееБуптахйеаВ->рргеЫооаБеае ) (БупгахуаЫе[сйуБупеахйпвЬег-)).рБуптахРо(пСег)->рйехСВеаВ = е1ае (п))++ тйусехйпвЬег = ОеС16епг]1(ег ( БупхахЫпе, 16епг11(ег, ) ) (*1)+$1 чЫ1е ((БупгахЫпе[*))=п' ') [[ (5уптахЬ]пе[п))= '(С')) ( БупСахТаЫе[$НубупгахйпвЬег).РБуатахрогптег->11$Ьехгса1 = ТКОЕ (и))+=4$ Глава 19 геСнгп; > ГПС СеСА1гегпагея ( гпС* ), вСгноС ввунгахНеас)* рйечБупгахОеас) ) ( гпС гБСаСня = ТКОК; яСгноС ввупгахА1С» рйечв1СегпаСе яегног вЯупСахА1С' РРгечгоняА1Сегнахе; > ) е1ве ( рргечгонвА1Сегпаяе = рйечА1СегпаСе; рйечА1СегпаСе = ва11ос [ ягвео( ( вСгноС в5упСахА)С гу (рРгечгоняА1СегпаСе!=МОЬЬ) ( > ) рРгечгоняА1СегпаСе->МехСА1С = рйечА1Сегпаге; рйечА1Сегпаге->Ргеч1оняА1С = рргечгоняА1Сегпаге ° Допаскип ениные течсатические раздел« ЕГ .
Чс 1й (*ррйечяупгахНеад)->[яупСахйнвЬег = >йехСяупгах/ече*/; гТ (гйехСБупяах>0) ( (пррйечяупвахНеас))->рргеч[онвКеас) БупСахТаЫе[гйехСБупгах-1).ряупСахро[пСег; гК ((БупхахТаЫе[гйехСБунСах-1).РЯупСахрогпСег)1 ИОЬЬ) ( (БупСахуаЫе([йехСБупСах-1).РБупСахРо[пгег)->рйехСНеаб *ррйечяупСахйеас); (*ррйечЯупгахйеас))->рргеч>оняНеас) = МОЬЬ > и( (яСговр(1бепС1(сег, " )==0) ( (*ррйечБупСахОеас)!->ЬехйонС1пе НОЬЬ) ('РРИечвупгахНеад)->г1ясех[оа1 = РАЬБК; ) е1яе ( СеСМонС[перогпСег ( 1вепСШег РгееА1сегпасев ( ЬРРгееА11 ) ) угее ( ругееБеас) ); ругеенеай = МОЬЬ) > чвг1е (( гясаснв == тнвк ) яя ( *) 1= О )) ( Сина аксическии онасиз и оычис.сение аыраксен д 1 Дополни ~алые»иепемап и»ее»иеран)елы Сиота» »инее и и и она»из и ни чине»ение нырах енин [ ! Часть 1Π— Глава 19 г = 1; гпт СетЯупсах1сев ( (пг» ), в1гист вяупсахйобу» рйеыВобу ) 11 ((ЯуптахЫпе[»))=='$') )~ (ЯуптахКТпе[»))»и'10')) ( ( 1пт (втатия = ТВОЕ; 15тагия = РАЕЯК) гпг ) 1пг Е; е1ве 1пт 11 ( 1 и 1 гб (»))+»' гп1 п) 15сатив = ТВОЕ; сЬаг Гбеп1111ег[йоОТ1ЕЕ ВАКЕ КЕВСТВ»1); ) [пт (»йоис(пейббгевв) ((пс», гпт»); ) ее» еовец оператора "11/сьев , завервевве апьтераатвви »/ вч1ссЬ (яупсахЫпе[»))) ( е1ве саве '('е ( ('Э)++1 РРгечгоияВобу = рйечйобу; 151атив = Се11бепШ1ег ( 5уптахКТпе, 1беп111(ег, ) )1 рйечВобу = аа11ос ( яггео1 ( атеист вЯуп1ахВобу ) ); (*))т+' 11 (рйгечгоивВобу==йиьц (яса1ия = Сесйоис(перо)птег ( )бепсШег, ЬйоитупеАббгеяя ); ( рйеыВобу->ВобуСЬесй = йоис1пейббгевя) рйечА1Сегпате->ТЬТвВобу = рйечВобу) Ьгеай; рйеиВобу->Ргеч(оивВобу = ВОЬЬ; саве '['» ) ('))++' е1яе 151атия СеС1бептШег ( ЯуптахЫпе, 1бептШег, ) ): ('1)++' рйечВобу->РгечроивВобу " рргеч1оивВобу; 15гасив = СетйоитгпеРоуп1ег ( 1бепву(ее, Ьйои11пеАббгевв ); Диначнитенксыетеиитическиераздепы Синтиксичсскии ина из и иычиссенис иыриыснии Часть и( Глава 19 Ьгеах( е/етет л= те(а/ ~ лап-те(а/ и Да, это конец анализа А-металла Ан )) те(а/ л= А-те(а/ ~ С-те(а/ ~ /ч'-те(а/ и Да, это А-металл Ан гетега )втатна; А-те(а/ с(= "А" А-те(и/-еле( и Да, это мстанл Ан ) С-те(а! л= "С" С-те(а/.