TRÄD-META
Originalförfattare | Donald Andrews, Jeff Rulifson |
---|---|
Initial release | 1968? |
TREE -META (eller Tree Meta , TREEMETA ) Translator Writing System är ett kompilator-kompilatorsystem för sammanhangsfria språk som ursprungligen utvecklades på 1960-talet. Att analysera uttalanden av metaspråket liknar utökad Backus-Naur-form med inbäddade trädbyggande direktiv. Avparsningsregler inkluderar omfattande trädskanning och kodgenereringskonstruktioner.
Historia
TREE-META var avgörande i utvecklingen av NLS (on-Line System) och portades till många system inklusive UNIVAC 1108 , GE 645 , SDS 940 , ICL 1906A , PERQ och UCSD p-System .
Exempel
Detta är ett komplett exempel på ett TREE-META-program extraherat (och opröstat) från det mer kompletta exemplet (deklarationer, villkor och block) i bilaga 6 i ICL 1900 TREE-META-manualen. Det dokumentet har också en definition av TREE-META i TREE-META i bilaga 3. Detta program är inte bara en igenkännare, utan matar också ut assemblerspråket för inmatningen. Det visar en av nyckelfunktionerna i TREE-META, vilket är matchning av trädmönster. Den används på både LHS (GET och VAL till exempel) och RHS (ADD och SUB).
% Detta är en kommentar i ALGOL-stil avgränsad med %
% ======================= INPUT PARSE REGLER ======================== % .META PROG % En programdefinierande körregel krävs. % % Denna PROG-regel är drivrutinen för hela programmet. % PROG = $STMT ; % $ är noll eller fler operatorn. % % PROG (programmet) definieras som noll eller fler STMT (påståenden). % STMT = .ID ':=' AEXP :STORE[2]*; % Analysera en tilldelningssats från källan till trädet. % % ':=' är en strängkonstant, :STORE skapar en STORE-nod, % % [2] definierar detta som att ha två grenar dvs STORE[ID,AEXP]. % % * utlöser en avparsning av trädet, med början med det senast skapade % %-trädet dvs STORE[ID,AEXP] som sänds ut som utdata och % % tas bort från trädet. % AEXP = FAKTOR $('+' FAKTOR :ADD[2] / '-' FAKTOR :SUB[2]); % Här har vi igenkännaren för aritmetisk '+' :ADD och '-' :SUB % % trädbyggnad. Återigen skapar [2] ett ADD- eller SUB-träd med två grenar. % % Unparsing skjuts upp tills en hel sats har tolkats. % % ADD[FAKTOR,FAKTOR] eller SUB[FAKTOR,FAKTOR] % FAKTOR = '-' PRIME :MINUSS[1] / PRIME ; PRIME = .ID / .NUM / '(' AEXP ')' ?3? ; %?3? är ett tips för felmeddelanden. % % ====================== OUTPUT UNPARSE REGLER =============================================================== -,-] => HÄMTA[*2] 'BUTIKA ' *1 ; % *1 är den vänstra trädgrenen. *2 är rätt % % GET[*2] kommer att generera kod för att ladda *2. % % 'STORE'-strängen kommer att matas ut % % följt av vänster gren *1 en symbol % % Oavsett *2, den kommer att laddas av GET[*2]. % GET[.ID] => 'LOAD ' *1 / [.NUM] => ' LOADI ' *1 / [MINUSS[.NUM]] => 'LOADN ' *1:*1 / [-] => * 1; % Här kommer ett .ID eller ett .NUM helt enkelt att laddas. En MINUSS-nod % % som innehåller ett .NUM kommer att använda detta, notationen *1:*1 betyder % % den första grenen (ett .NUM) av den första grenen (MINUSS). % % Allt annat kommer att skickas vidare för nodigenkänning % % Unparse-reglerna dekonstruerar en trädutmatningskod. % ADD[-,-] => SIMP[*2] GET[*1] 'ADD' VAL[*2] / SIMP[*1] GET[*2] 'ADD' VALUE[*1] / GET[* 1] 'STORE T+' < OUT[A] ; A<-A+1 > / GET[*2] 'ADD T+' < A<-A-1 ; UT[A] > ; % Chevrons < > indikerar en aritmetisk operation, till exempel att % % genererar en offset A i förhållande till en basadress T. % SUB[-,-] => SIMP[*2] GET[*1] 'SUB' VAL[* 2] / SIMP[*1] GET[*2] 'NEGATE' % 'ADD' VAL[*1] / GET[*2] 'STORE T+' < OUT[A] ; A<-A+1 > / GET[*1] 'SUB T+' < A<-A-1 ; UT[A] > ; % Ett procenttecken i en avtolkningsregel indikerar en nyrad. % SIMP[.ID] => .EMPTY / [.NUM] => .EMPTY / [MINUSS[.NUM]] => .EMPTY; VAL[.ID] => ' ' *1 / [.NUM] => 'JAG ' *1 / [MINUSS[.NUM]] => 'N ' *1:*1 ; MINUS[-] => FÅ[*1] 'NEGATE' ; .SLUTET
Se även
- C. Stephen Carr, David A. Luther, Sherian Erdmann, The TREE-META Compiler-Compiler System: A Meta Compiler System for Univac 1108 och General Electric 645 [ död länk ] , University of Utah Technical Report RADC-TR-69- 83.
- [1] [ död länk ] , även [2] Tech Report från 1968 av Englebart, English och Rulifson om Tree Metas användning i vad de kallade Special-Purpose Languages (SPL), som vi nu kallar Domain Specific Languages (DSL), i NLS.
- Donald I. Andrews, JF Rulifson (1967). Tree Meta (Working Draft): En metakompilator för SDS 940, Stanford Research Institute, Menlo Park, CA. Engelbart Collection, Stanford University Archive, M 638, Box 16, Folder 3.
- ANDREWS, LEHTMAN och WHP. "Tree Meta – en metakompilator för Augmentation Research Center". Preliminärt utkast, 25 mars 1971.
- Alan C. Kay The Reactive Engine Ph.D. avhandling 1969 University of Utah. Noterar att Henri Gouraud gjorde FLEX-kompilatorn i TREE-META på SRI (Engelbart) SDS-940.
- Atlas Computer Laboratory kvartalsrapport (21 november 1975), FRA Hopgood-dokument arbetar med TREE-META för att skapa en kompilator som genererar FR80-assemblerutdata.
- Atlas Computer Laboratory kvartalsrapport (12 oktober 1973), CJ Pavelin dokumenterar (avsnitt 4.10) att TREE-META porteras till 1906A .
- TREE-META: en metakompilator för Interdata Model 4 av WM Newman. Queen Mary College, London. november 1972.
externa länkar
- Manual för ICL 1900 version av TREE-META av FRA Hopgood.
- Hemsida för att samla information om TREE-META
- TREE META Draft Document December, 1967 på bitsavers.org
- TREE META Release Document april 1968 på bitsavers.org
- STUDIE FÖR UTVECKLING AV TEKNIKER FÖR HUMAN INTELLECTAUGMENTATION av DC Engelbart
- Implementering av TREE-META i C (baserat på versionen av TREE-META för ICL 1900) [ död länk ]
- En återupplivning av TREE-META-kompilator-kompilatorn.