Реферат: Структура и реализация макроязыков

DEFINE(cos)

оп­ре­де­ляя та­ким об­ра­зом но­вое мак­ро­оп­ре­де­ле­ние с име­нем cos, к ко­то­ро­му впо­след­ст­вии мож­но об­ра­щать­ся сле­дую­щим об­ра­зом:

cos(х)

и мак­ро­про­цес­сор сге­не­ри­ру­ет со­от­вет­ст­вую­щую по­сле­до­ватель­ность вы­зо­ва функ­ции.


РЕА­ЛИ­ЗА­ЦИЯ

Та­ким об­ра­зом, на­ми был опи­сан ва­ри­ант реа­ли­за­ции мак­ро­язы­ка. Рас­смот­рим ме­тод реа­ли­за­ции мак­ро­язы­ка. В ка­че­ст­ве при­ме­ра возь­мем клас­си­че­ский язык мак­ро­ас­семб­ле­ра.

ПО­СТА­НОВ­КА ЗА­ДА­ЧИ

Лю­бой про­цес­сор мак­ро­ко­манд дол­жен ре­шать сле­дую­щие че­ты­ре ос­нов­ные за­да­чи:

Рас­по­зна­вать мак­ро­оп­ре­де­ле­ния. Про­цес­сор мак­ро­ко­манд дол­жен рас­по­зна­вать мак­ро­оп­ре­де­ле­ния, вы­де­ляе­мые со­от­вет­ст­вую­щи­ми псев­до­ко­ман­да­ми. В язы­ке мак­ро­ас­семб­ле­ра эти­ми псев­до­опе­ра­то­ра­ми яв­ля­ют­ся псев­до­ко­ман­ды MACRO и MEND. Эта за­да­ча мо­жет быть ус­лож­не­на тем, что внут­ри мак­ро­оп­ре­де­ле­ний мо­гут встре­чать­ся так­же дру­гие мак­ро­оп­ре­де­ле­ния. Ко­гда мак­ро­оп­ре­де­ле­ния вло­же­ны, как бы­ло про­де­мон­ст­ри­ро­ва­но вы­ше, мак­ро­про­цес­сор дол­жен пра­виль­но рас­по­зна­вать вло­же­ния и со­пос­та­вить на­ча­ло и ко­нец мак­ро­са. Весь вло­жен­ный текст, вклю­чая и дру­гие мак­ро­оп­ре­де­ле­ния оп­ре­де­ля­ет от­дель­ную мак­ро­ко­ман­ду.

За­по­ми­нать мак­ро­оп­ре­де­ле­ния. Про­цес­сор дол­жен за­пом­нить оп­ре­де­ле­ния мак­ро­ко­манд, ко­то­рые бу­дут впо­след­ст­вии ис­поль­зо­вать­ся для рас­ши­ре­ния мак­ро­вы­зо­вов

Рас­по­зна­вать вы­зо­вы. Не­об­хо­ди­мо так­же и рас­по­зна­вать мак­ро­вы­зо­вы, пред­став­лен­ные в ви­де мне­мо­ни­че­ско­го ко­да опе­ра­ции. Это пред­по­ла­га­ет, что име­на мак­ро­ко­манд об­ра­ба­ты­ва­ют­ся на тех же са­мых ос­но­ва­ни­ях, как и один из ко­дов опе­ра­ции.

Вы­пол­нять рас­ши­ре­ние мак­ро­ко­манд и под­ста­нов­ку фак­ти­че­ских па­ра­мет­ров. Вме­сто фор­маль­ных па­ра­мет­ров мак­ро­оп­ре­де­ле­ния мак­ро­про­цес­сор дол­жен под­ста­вить со­от­вет­ст­вую­щие опе­ран­ды мак­ро­ко­ман­ды. Этот текст, в свою оче­редь мо­жет со­дер­жать как мак­ро­ко­ман­ды так и мак­ро­оп­ре­де­ле­ния.

Та­ким об­ра­зом, мак­ро­про­цес­сор дол­жен рас­по­зна­вать и об­ра­ба­ты­вать мак­ро­оп­ре­де­ле­ния и мак­ро­ко­ман­ды.

Что же ка­са­ет­ся фор­маль­ных па­ра­мет­ров, то тут нуж­но при­нять не­сколь­ко ре­ше­ний. Не­об­хо­ди­мо оп­ре­де­лить - мо­гут ли они встре­чать­ся в ка­че­ст­ве ко­да опе­ра­ции, ка­ков син­так­сис до­пус­ти­мых па­ра­мет­ров. В раз­ных реа­ли­за­ци­ях мак­ро­язы­ков мо­гут встре­чать­ся раз­ные ва­ри­ан­ты ме­то­ды реа­ли­за­ции по­доб­ных си­туа­ций, по­это­му мож­но толь­ко дать не­ко­то­рые ра­зум­ные ва­ри­ан­ты, по­кры­ваю­щие боль­шую часть воз­мож­ных реа­ли­за­ций. Фор­маль­ные па­ра­мет­ры мо­гут встре­чать­ся в мак­ро­оп­ре­де­ле­нии где угод­но, в том чис­ле и в ко­ман­де и в ко­де опе­ра­ции. Мы хо­тим, что­бы бы­ла обес­пе­че­на воз­мож­ность кон­ка­те­на­ции фор­маль­ных па­ра­мет­ров мак­ро­оп­ре­де­ле­ния с фик­си­ро­ван­ны­ми сим­воль­ны­ми стро­ка­ми. В та­ком слу­чае вста­ет во­прос о не­ко­ем раз­де­ли­тель­ном сим­во­ле, обес­пе­чи­ваю­щем кон­ка­те­на­цию фор­маль­ных па­ра­мет­ров и за­дан­ных поль­зо­ва­те­лем сим­воль­ных по­сле­до­ва­тель­но­стей.

На­при­мер, ес­ли из один из па­ра­мет­ров дол­жен быть со­еди­нен с дру­гим (macro[x,y] = xy), то воз­мо­жен син­так­сис x&y, что оз­на­ча­ет кон­ка­те­на­цию фор­маль­но­го па­ра­мет­ра x с фор­маль­ным па­ра­мет­ром y. Этот слу­чай не вы­зы­ва­ет боль­ших труд­но­стей. Го­раз­до слож­ней об­ра­ба­ты­ва­ет­ся слу­чай, ко­гда речь идет о под­ста­нов­ке па­ра­мет­ра внут­ри сим­воль­ной стро­ки. В та­ком слу­чае воз­мож­ным вы­хо­дом бу­дет кон­ка­те­на­ция по умол­ча­нию двух по­сле­до­ва­тель­но друг за дру­гом иду­щих сим­воль­ных строк, а так­же пре­об­ра­зо­ва­ние фор­маль­но­го па­ра­мет­ра, за­клю­чен­но­го в скоб­ки к сим­воль­ной стро­ке. Та­ким об­ра­зом, ес­ли мы хо­тим, что­бы в мак­ро­се фи­гу­ри­ро­ва­ла стро­ка ви­да “blablabla[x]xxxxx”, где [x] долж­но за­ме­нять­ся фор­маль­ным па­ра­мет­ром впол­не воз­мож­но за­ме­нить стро­ку та­ко­го ви­да стро­кой ти­па “blablabla”(x)”xxxxx”.

На­до за­ме­тить, что мно­же­ст­во за­ме­ча­тель­ных идей по реа­ли­за­ции по­доб­ных мак­ро­язы­ков реа­ли­зо­ва­но в язы­ке REXX, под­дер­жи­вае­мом на сис­тем­ном уров­не опе­ра­ци­он­ной сис­те­мой OS/2 ком­па­нии IBM.

Так­же для вы­пол­не­ния функ­ций ус­лов­ных пе­ре­хо­дов долж­ны вы­чис­лять­ся не­ко­то­рые ариф­ме­ти­че­ские вы­ра­же­ния (возь­мем в при­мер хо­тя бы обык­но­вен­ных счет­чик). Та­ким об­ра­зом час­то ока­зы­ва­ет­ся по­лез­ной воз­мож­ность ис­поль­зо­ва­ния псев­до-пе­ре­мен­ных вре­ме­ни ком­пи­ля­ции внут­ри мак­ро­сов.


ДВУ­ПРОС­МОТ­РО­ВЫЙ АЛ­ГО­РИТМ

Нач­нем с не­ко­то­рых уп­ро­щаю­щих пред­по­ло­же­ний. Бу­дем счи­тать, что наш мак­ро­про­цес­сор функ­цио­наль­но не­за­ви­сим от ос­нов­но­го ком­пи­ля­то­ра и его текст бу­дет пе­ре­да­вать­ся это­му ком­пи­ля­то­ру. Сна­ча­ла не раз­ре­шим мак­ро­вы­зо­вы и мак­ро­оп­ре­де­ле­ния внут­ри мак­ро­оп­ре­де­ле­ний.

Мак­ро­про­цес­сор, как и язык ас­семб­ле­ра, про­смат­ри­ва­ет и об­ра­ба­ты­ва­ет стро­ки тек­ста. Но в язы­ке все стро­ки свя­за­ны ад­ре­са­ци­ей - од­на стро­ка мо­жет ссы­лать­ся на дру­гую при по­мо­щи ад­ре­са или име­ни, ко­то­рое долж­но быть “из­вест­но” ас­семб­ле­ру. Бо­лее то­го, ад­рес присваеваемый ка­ж­дой от­дель­ной стро­ке за­ви­сит от со­дер­жи­мо­го, ко­ли­че­ст­ва и ад­ре­сов пред­ше­ст­вую­щих строк. Ес­ли рас­смат­ри­вать мак­ро­оп­ре­де­ле­ние, как еди­ный объ­ект, то мож­но ска­зать, что стро­ки на­ше­го мак­ро­оп­ре­де­ле­ния не так силь­но взаи­мо­свя­за­ны. Мак­ро­оп­ре­де­ле­ния не мо­гут ссы­лать­ся на объ­ек­ты во­вне это­го мак­ро­оп­ре­де­ле­ния. Пред­по­ло­жим, что в те­ле мак­ро­оп­ре­де­ле­ния есть стро­ка INCR X, при­чем пе­ред этой ко­ман­дой па­ра­метр Х по­лу­чил зна­че­ние 10. Мак­ро­про­цес­сор не про­из­во­дит син­так­си­че­ский ана­лиз, а про­из­во­дит про­стую тек­сто­вую под­ста­нов­ку вме­сто “Х” под­став­ля­ет­ся “10”.

Наш ал­го­ритм бу­дет вы­пол­нять 2 сис­те­ма­ти­че­ских про­смот­ра вход­но­го тек­ста. В пер­вый про­ход бу­дут де­тер­ми­ни­ро­ва­ны все мак­ро­оп­ре­де­ле­ния, во вто­рой про­ход бу­дут от­кры­ты все ссыл­ки на мак­ро­сы. Так же, как и язык ас­семб­ле­ра не мо­жет вы­пол­нить ссыл­ку на сим­вол до то­го мо­мен­та, как он встре­тит этот сим­вол, язык мак­ро­ко­манд не мо­жет вы­пол­нить рас­ши­ре­ние до тех пор, по­ка не встре­тит со­от­вет­ст­вую­щее мак­ро­оп­ре­де­ле­ние. Во вре­мя пер­во­го про­смот­ра про­ве­ря­ет­ся ка­ж­дый код опе­ра­ции, мак­ро­оп­ре­де­ле­ния за­по­ми­на­ют­ся в таб­ли­це мак­ро­оп­ре­де­ле­ний, а ко­пия ис­ход­но­го тек­ста без мак­ро­оп­ре­де­ле­ний за­по­ми­на­ет­ся во внеш­ней па­мя­ти, для ис­поль­зо­ва­ния ее при вто­ром про­хо­де. По­ми­мо таб­ли­цы мак­ро­оп­ре­де­ле­ний во вре­мя пер­во­го про­хо­да бу­дет так­же таб­ли­ца имен, во вто­рой про­ход она бу­дет ис­поль­зо­вать­ся для вы­де­ле­ния мак­ро­опе­ра­ций и рас­ши­ре­ния их до тек­ста со­от­вет­ст­вую­ще­го мак­ро­оп­ре­де­ле­ния.

ДАН­НЫЕ ДЛЯ ПЕР­ВО­ГО ПРО­СМОТ­РА

1. ВХТ - Вход­ной текст

2. ВЫХ1 - Вы­ход­ная ко­пия тек­ста для ис­поль­зо­ва­ния во вто­рой про­ход.

3. МДТ - таб­ли­ца мак­ро­оп­ре­де­ле­ний, в ко­то­рой хра­нят­ся те­ла мак­ро­оп­ре­де­ле­ний

4. МНТ - таблица имен, не­об­хо­ди­мая для хра­не­ния имен мак­ро­ко­манд, оп­ре­де­лен­ных в МНТ

5. МДТС - счет­чик для таб­ли­цы МДТ

6. МНТС - счет­чик для таб­ли­цы МНТ

7. АЛА - мас­сив спи­ска па­ра­мет­ров для под­ста­нов­ки ин­декс­ных мар­ке­ров вме­сто фор­маль­ных па­ра­мет­ров, пе­ред за­по­ми­на­ни­ем оп­ре­де­ле­ния.

ДАН­НЫЕ ДЛЯ ВТО­РО­ГО ПРО­СМОТ­РА

К-во Просмотров: 492
Бесплатно скачать Реферат: Структура и реализация макроязыков