GIER/IMP
IMP, Interpretative Macro Processor, er et makrosprog som er udviklet på Københavns Universitet, Afdeling for Informationsbehandling (senere DIKU), af bl.a. Bjarner Svejgaard.
Det er et program som tager en hulstrimmel som input, og aflevere resultatet som en ny hulstrimmel.
Det kan bruges til at udvide SLIP eller ALGOL med makroer, eller det kan bruges til almindelig tekstbehandling.
I februar 2020 modtog vi en hulstrimmel fra Kasper F. Brandt med et eksempel på en inputstrimmel til makroprocessoren. Han havde modtaget strimlen fra Ellen Banz.
Vi har også modtaget filer med indskannet dokumentation:
- IMP III (Interpretative Macro Processor)
- IMP - A Programming Language with floating Definitions
- Description of IMP IV (supplement to IMP III)
Kaspers strimmel er indlæst på en RC2000 og gemt i strimmeldatabasen.
Jeg har prøvet at skrive en makroprocessor i GIER ALGOL 4 som virker som den oprindelige processor (som vi jo ikke har). Den er opdelt i to passager og burde kunne køre på vores GIER maskine (når punchen virker):
I første passage læses hulstrimlen, de specielle makrotegn genkendes og resten skrives på tromlen, 4 tegn i hvert ord (samme måde som GIER ALGOL gør).
Ved hver makrodefinition eller -kald gemmes makronavnet i en tabel og erstattes med en talkode. Tromleadressen på starten af hver makro gemmes i en tabel. Ved hver makroafslutning gemmes en tabel med information om lokale makroer og deres adresser. Adressen på denne tabel indsættes tilbage i starten af makrodefinitionen.
I passage 2 udhulles de tegn, som ikke er specielle makroinstruktioner. Ved et makrokald indlæses tabellen med de lokale makroer, parametrene evalueres én for én og gemmes på tromlen. Parameterevalueringen kompliceres af, at den kan indeholde yderligere makrokald. Ved referencer til parametre hentes de fra tromlen og kopieres ind på strimlen. Ved makroafslutningen fjernes de lokale makrodefinitioner fra tabellen og der returneres til punktet efter makrokaldet.
Jeg har lagt programmet i strimmeldatabasen.
Kaspers strimmel indeholder én stor makro med en masse undermakroer, hvis man tilføjer strimlen et kald af hovedmakroen:
|(NAVNELISTE|)
giver makroprocessoren følgende output strimmel.
På simulatoren med en konfiguration svarende til vores kørende GIER (ingen buffer, én tromle) kan programmet oversættes med den transiente GIER ALGOL 4 oversætter. Det oversatte program fylder 94 kanaler. Under kørslen af programmet er der 123 kanaler til rådighed i det frie tromleareal. Koden fra første passage fylder 49 tromlekanaler. Første passage tager 37 minutter, anden passage 11½ minut. Programmet kører en del hurtigere på en GIER med bufferlager fordi tabellerne gemmes i bufferen. Det giver mere plads i core til programsegmenter og dermed færre tromletransporter.
Outputstrimlen er et SLIP program, og man kan se på den måde det udskriver tekststrenge på at det er skrevet til at blive kørt under det gamle operativsystem, HJÆLP.
Jeg mangler endnu at finde ud af præcist hvordan programmet arbejder og hvilken format inputstrimlerne til programmet skal have.