META II - META II

META II Бұл доменге тән бағдарламалау тілі жазу үшін құрастырушылар. Оны 1963-1964 жылдары Дьюи Валь Шорр жасаған UCLA. META II Schorre деп атайды синтаксистік теңдеулер. Оның жұмысы қарапайым түрде түсіндіріледі:

Әрқайсысы синтаксистік теңдеу белгілі бір фраза құрылымы үшін кіріс жолын тексеретін және табылған жағдайда оны өшіретін рекурсивті ішкі бағдарламаға аударылады.[1]

Meta II бағдарламалары интерпретацияланған байт-код тіліне жинақталған. Оның мүмкіндіктерін көрсететін VALGOL және SMALGOL компиляторлары META II тілінде жазылған,[1][2] VALGOL - бұл META II-ді иллюстрациялау мақсатында жасалған қарапайым алгебралық тіл. SMALGOL - бұл өте үлкен жиынтық ALGOL 60.

Нота

META II бірінші рет META I-де жазылған,[3] META II қолмен құрастырылған нұсқасы. META I толық META II компиляторын құрастыру үшін қажет META II немесе META II тілінің қажетті жиынтығы ма екендігі туралы түсініксіз.

Құжатында META II ұқсас деп сипатталған BNF, ол бүгінде өндірістік грамматика ретінде түсіндіріледі. META II - бұл аналитикалық грамматика. Ішінде TREE-META құжат бұл тілдер редуктивті грамматика ретінде сипатталған.

Мысалы, BNF-де арифметикалық өрнек келесідей анықталуы мүмкін:

<экспр> := <мерзім> | <экспр> <аддоп> <мерзім>

BNF ережелері - бұл тек қана жарамды тілдік құрылымдарды құру үшін құрамдас бөліктерді қалай жинауға болатындығын сипаттайтын өндіріс ережелері. Талдаушы тіл конструкциясын бөліп алып, керісінше жасайды. META II - бұл а стекке негізделген функционалды талдаушы бағдарламалау тілі оған шығыс директивасы жатады. META II-де тестілеудің реті теңдеумен анықталады. META II басқа бағдарламалау тілдері сияқты, сол жақтағы рекурсияға тырысып, стектен асып түседі. META II $ (нөл немесе одан көп) қатар операторын қолданады. META II-де жазылған экспр талдаушы теңдеу шартты өрнек болып табылады, солдан оңға қарай бағаланады:

экспр = мерзім       $( '+' мерзім .ШЫҚТЫ('ҚОСУ')        / '-' мерзім .ШЫҚТЫ('SUB'));

Expr теңдеуінің үстінде '=' оң жағындағы өрнек анықталады. '=', Терминнен солға оңға қарай бағалау - бұл бірінші кезекте тексерілуі керек. Егер мерзім қайтарылса, сәтсіздікке жол берілмейді. Егер сәтті термин анықталса, біз $ нөлге немесе одан да көп циклге кіреміз, егер '-' баламасы орындалмаса, алдымен '+' сынағын өткізіп, егер а - - 'деп танылмаса цикл expr мәнімен аяқталады бір мерзімді мойындай отырып, табысты қайтару. Егер '+' немесе '-' сәтті болса, онда термин шақырылатын болады. Егер сәтті болса, цикл қайталануы мүмкін. Экспр теңдеуін кірістірілген топтастыруды қолдану арқылы да өрнектеуге болады:

экспр = мерзім $(('+' / '-') мерзім);

Мысалды жеңілдету үшін код шығару элементтері қалдырылды. Ертедегі компьютерлердің таңбалар жиынтығының шектеулі болуына байланысты / немесе оператор ретінде қолданылды. The $, цикл операторы, нөлге немесе одан көп нәрсеге сәйкес келу үшін қолданылады:

экспр = мерзім $(  '+' мерзім .ШЫҚТЫ('ҚОСУ')              / '-' мерзім .ШЫҚТЫ('SUB')              );

Жоғарыда айтылғандарды ағылшын тілінде білдіруге болады: Expr дегеніміз - нольге немесе одан көпке дейінгі термин (плюс термин немесе минус термин). Шорр мұны тиімділікке көмек ретінде сипаттайды, бірақ аңғалдыққа ұқсамайды рекурсивті шығу компилятор ол сонымен қатар ассоциативтілік арифметикалық амалдар дұрыс:

экспр = мерзім $('+' мерзім .ШЫҚТЫ('ҚОСУ')              / '-' мерзім .ШЫҚТЫ('SUB')             );мерзім = фактор $( '*' фактор .ШЫҚТЫ('MPY')               / '/' фактор .ШЫҚТЫ('DIV')               );фактор = ( .Жеке куәлік         / .САН         / '(' экспр ')')         ( '^' фактор .ШЫҚТЫ('EXP')         / .БОС);

Тізбекті циклмен немесе оң («құйрық») рекурсиямен өрнектеу мүмкіндігімен бағалау ретін басқаруға болады.

Синтаксистік ережелер декларативті болып көрінеді, бірақ олардың мағыналық сипаттамалары бойынша императивті болып табылады.

Пайдалану

META II стек машинасына арналған құрастыру кодын шығарады. Мұны бағалау an қолдану сияқты RPN калькулятор.

экспр = мерзім       $('+' мерзім .ШЫҚТЫ('ҚОСУ')        /'-' мерзім .ШЫҚТЫ('SUB'));мерзім = фактор       $('*' фактор .ШЫҚТЫ('MPY')       / '/' фактор .ШЫҚТЫ('DIV'));фактор = (.Жеке куәлік .ШЫҚТЫ('LD ' *)          / .NUM .ШЫҚТЫ('LDL ' *)         / '(' экспр ')')          ( '^' фактор .ШЫҚТЫ('XPN'/.БОС);

Жоғарыда .ID және .NUM таңбалауыштар орнатылған. * .OUT коды өндірісінде танылған соңғы белгіге сілтеме жасайды. .NUM .OUT ('LDL' *) бар санды тану кезінде жүктеменің әріптік нұсқауы саннан кейін шығады. Өрнек:

(3 * a ^ 2 + 5) / b

жасайды:

      LDL 3      LD  а      LDL 2      XPN      MPY      LDL 5      ҚОСУ      LD  б      DIV

META II - а-ның алғашқы құжатталған нұсқасы метакомпилятор,[1 ескертулер] а кодының алғашқы нұсқаларының бірі үшін машиналық кодқа жинақталған кезде виртуалды машина.

Қағаздың өзі керемет асыл тас, ол бірқатар тамаша мысалдарды, соның ішінде Meta II-ді жүктеуді де қосады (мұның барлығы 8K (алты биттік байт) 1401-де жасалған!). «- Alan Kay

Қағаздың түпнұсқасы еркін қол жетімді емес, бірақ Доктор Доббтың журналында қайта басылды (1980 ж. Сәуір). Транскрипцияланған бастапқы код әр уақытта қол жетімді болды (мүмкін CP / M пайдаланушылар тобы). Мақалаға Meta II сипаттамасының тізімі енгізілген, оны виртуалды машиналық опкодтарда интерпретацияланатын бағдарлама алу үшін қолмен өңдеуге болады; егер ол жұмыс істеп, бірдей өнім шығарса, онда іске асыру дұрыс болды.

META II негізінен тұжырымдаманың дәлелі болды. Жұмыс істейтін база.

META II а ретінде ұсынылмаған стандартты тіл, бірақ пайдаланушы өзін дамыта алатын шығу нүктесі ретінде META "тіл".[1]

Мұнан кейін көптеген META «тілдері» келді. Шорр жұмысқа кетті Жүйені дамыту корпорациясы онда ол компиляторларды жазу және енгізу бойынша құрастырушы (CWIC) жобасының мүшесі болған. META II-ге негізделген CWIC-тің SYNTAX тілі альтернативті оператордың оң және теріс операторларына және бағдарламаланған таңбалауыш теңдеулеріне оң және теріс оператор қосады. The .OUT және .ЗАТТАҢБА жою операциялары және стек түрлендіру операциялары : <түйін> және ! <сан> қосылды. Негізделген GENERATOR тілі LISP 2 SYNTAX талдау тілі жасаған ағаштарды өңдеді. Кодты қалыптастыру үшін генератор функциясына қоңырау SYNTAX теңдеуіне қойылды. Бұл тілдерді L.A. ACM SIGPLAN ішкі тобының мүшелері синтаксистік бағытталған компиляторлар бойынша әзірледі. Schorre-дің META II тілі туралы ойлағаны байқалады:

Термин META «тіл» META бас әріптермен кез-келген компилятор-жазуды белгілеу үшін қолданылады тіл соншалықты дамыған.[1]

Schorre META II-ді басқа META «тілдері» дамуы мүмкін негіз ретінде түсіндіреді.

Сондай-ақ қараңыз

Ескертулер

  1. ^ Тек META II құжатында айтылған META I-ді елемеу.

Әдебиеттер тізімі

  1. ^ а б c г. META II Синтаксистік бағдарланған компилятордың жазу тілі (Dewey Val Schorre UCLA Computing Facility 1964)
  2. ^ Дьюи, Валь Шорр (1963). «Синтаксис - 1401 жылға арналған SMALGOL». ACM Natl. Конф., Денвер, Коло.
  3. ^ Дьюи, Валь Шорр (1963). META II: синтаксиске бағытталған компилятордың жазу тілі (PDF). UCLA: UCLA есептеу құралы.

Сыртқы сілтемелер