Structura și implementarea limbilor macro

Un operator care lucrează într-un sistem se întâlnește de multe ori cu necesitatea de a repeta anumite secvențe de acțiuni de mai multe ori? O astfel de secvență poate fi, de exemplu, aceea de a introduce o anumită secvență de text, apăsând o anumită secvență de chei, efectuând o serie de operații aritmetice de același tip. În astfel de cazuri, puteți utiliza adesea macro-ul dispozitivului.







Macroanele (adesea numite macrocomenzi sau macrocomenzi) sunt abrevieri cu o singură linie pentru un grup de comenzi. Utilizând o macrocomandă, programatorul definește în esență o "comandă" pentru a reprezenta o anumită secvență de comenzi.

Prin definirea macrocomenzilor potrivite, operatorul poate introduce cu ușurință propriile instrumente de nivel superior fără a se îngrijora de structura sistemului. Poate realiza concizia și simplitatea managementului sistemului fără a pierde principalele avantaje ale utilizării sistemului sursă, cum ar fi limba de asamblare. Macrooperațiile mari simplifică utilizarea, depanarea și modificarea programelor și facilitează standardizarea. Mulți dezvoltatori de calculatoare folosesc macrocomenzi pentru a automatiza compilarea sistemelor de operare "potrivite" într-un proces numit generare de sisteme

În forma sa cea mai simplă, macro este o abreviere pentru secvența de operații

Luați în considerare următorul set de comenzi, preluate din limba macro IDE pentru Borland C ++ versiunea 3.1 (TEMC). Luați în considerare următorul program scris cu aceste operații

În secvența de comenzi de mai sus

Dispozitivul macro vă permite să atribuiți un nume acestei secvențe și să utilizați în schimb numele respectiv. De asemenea, este posibil să definim o anumită limbă macro care ne permite să considerăm această construcție ca o definiție și să folosim această definiție în viitor.

De fapt, macroprocesorul este un procesor de limbaj separat, cu propria sa limbă.

Formatele de macrocomenzi din diferite sisteme pot diferi una de cealaltă. În acest caz, secvența de comandă care definește macroul are următorul format

MACRO

MACRO pseudo - prima linie a definiției - definește identificatorul care o urmează, ca și denumirea macro-ului. Urmând această linie este o secvență de comenzi, numită "corpul de macrocomenzi". Definiția se termină cu un șir cu comanda pseudo END.







Dacă este definită macrocomanda, atunci folosirea numelui macro corespunzător ca cod mnemonics în program este echivalentă cu utilizarea secvenței de comandă corespunzătoare. Dacă o secvență repetată de comenzi este denumită "MacPageUp", atunci exemplul nostru poate fi rescris după cum urmează:

buclă până la (FLACUL OUTPUT == 0)

citirea următoarei linii a WTT

dacă operația MACRO

ieșind o linie în OUT1

> Pa (operațiunea MEND)

trecerea la compilare

ciclu pentru acum! (FLACUL OUTPUT)

citirea următoarei linii a WTT

FOUND = căutare în cod în MNT

INDEX = indice MNT

Completarea listei parametrilor ALA

citirea următoare. rânduri de la MDT

> Pa (operațiunea MEND)

altfel dacă! (funcționarea MACRO)

ieșind o linie în OUT1

dacă (funcția END) FLACUL DE PRODUCȚIE = 1

Înregistrați numele și indexul în MNT

pregătiți o serie de listă ALA

numele înregistrării în MDT

citirea următoarei linii a WTT

substituirea indexului operatorului

în plus față de MDT

> Pa (operațiunea MEND)

acest algoritm este o simplificare a algoritmului dat în [1], capitolul 4.3.2. Diferența constă în faptul că instrumentele moderne de intelectualizare a programării ne permit să inserăm și să eliminăm din matrice mari cu un timp minim al procesorului, ceea ce a fost imposibil cu cardurile de perforare. În plus, viteza procesoarelor moderne este atât de mare încât permite introducerea și ștergerea directă în matrice de dimensiuni medii (de exemplu, până la 64 kilobytes) în timp real. Astfel, extensia macro-ului sursă poate fi inserată direct în matricea text sursă și procesată într-o formă extinsă. Această tehnologie permite simplificarea semnificativă a algoritmului de procesare a limbajului macro.

REALIZAREA IN CADRUL ASEMBLERULUI

Multe funcții nu trebuie implementate de două ori (de exemplu, funcții I / O, verificări de tip etc.)

În timpul procesării, nu este nevoie să creați fișiere sau seturi de date intermediare.

Programatorul are posibilități suplimentare de a combina instrumentul de asamblare (de exemplu, comanda EUQ) împreună cu macrocomenzile.

Programul ar trebui să necesite mai multă memorie RAM, care este esențială pentru anumite tipuri de computere care nu au multă memorie RAM.

Implementarea acestui tip de sarcină poate fi un ordin de mărime mai complicat decât o implementare separată a asamblorului și a macroprocesorului.

Limbile macro și macroprocesoarele corespunzătoare sunt o formă independentă de limbi de programare. Atunci când este utilizat împreună cu asamblorul, macroprocesorul este un instrument util pentru programator și îi permite, în esență, să-și definească propria limbă de nivel "înalt".

Există patru sarcini principale rezolvate de macroprocesor:

Extinderea macrocomenzilor și înlocuirea parametrilor

Macroprocesorul în asamblare poate fi implementat în mai multe moduri:

În lucrarea despre rezumat a fost folosită următoarea literatură:

[1] J. Jordan - "Programarea sistemelor"

[2] IBM OS / 2 - "Referința programatorului REXX"

[3] Borland C ++ - Documentația inclusă și sursele.

Structura și implementarea limbilor macro

Tehnologia

arhitectură

Astronomie, aviație, cosmonautică







Trimiteți-le prietenilor: