Кіріспе

ML/1 (Macro Language/One) – қуатты жалпы мақсаттағы макропроцессор. ML/1-дің қалыпты қолданылуы: мәтіндік файлдарды өңдеу, өзгерту, түзету немесе қайта форматтау, бастапқы кодты бір бағдарламалау тілінен екіншісіне аудару, бастапқы кодты алдын ала өңдеуші ретінде пайдалану, соның арқасында қолданушыға қолданыстағы бағдарламалау тіліне жаңа синтаксистік формаларды қосу мүмкіндігі туады (мысалы, параметр бағдарламаның бастапқы кодына енгізілетін түзету операторларын анықтауы мүмкін). ML/1 1966 жылы Питер Дж. Браун Англияның Кембридж университетіндегі докторлық зерттеуінің бөлігі ретінде жасалған. 1984 жылы Питер Браунның Кент университетіндегі әріптесі Роберт Д. Игер ML/I-ді қайта жазды, алдымен 1981 жылы BCPL тілінде, ал кейін 1984 жылы C тілінде, бұл оның тасымалдану мүмкіндігін арттырды. Питер Браунның тілге алғаш берген аты ML/I екеніне назар аударыңыз, онда соңғы таңба араб цифры "1" емес, рим цифры "I" болған. Дегенмен, кейінгі көптеген нұсқаулар ML/1 деп аталды (онда соңғы таңба араб цифры "1"). Содан бері ML/1 көптеген платформалар мен операциялық жүйелерге портталды, оның ішінде VMS, MVS, MS DOS, OS/2 және UNIX. Роберт Д. Игер ML/1-ді жүзеге асыру кезінде Питер Браунның диссертациясында көрсетілген мүмкіндіктерге қосымша жаңа мүмкіндіктер мен қабілеттерді қосты. Бұл нұсқа ML/1 веб-сайты арқылы көптеген платформалар үшін қолжетімді: http://www.ml1.org.uk. ML/1 веб-сайтында ML/1 туралы толыққанды ақпарат, сондай-ақ құжаттама (оқулық, қарапайым нұсқаулық және толық пайдаланушы нұсқаулығы қоса алғанда) бар. Әлемдегі ML/1 пайдаланушыларының саны аз болғанымен, ML/1 пайдаланушылары бүкіл әлемде кездеседі, ал Боб АҚШ, Канада, Австралия, Жаңа Зеландия, Германия, Голландия және Үндістан елдеріндегі ML/1 пайдаланушыларымен хат алмасып тұрады. 1976 жылғы мақалада Эндрю С. Таненбаум ML/I-ді компилятор құрастырушы ретінде пайдалануды сипаттаған.

Шолу

ML/I кірісті толық еркін форматта қабылдайды, деректерді жолдар немесе жазбалар тізбегі ретінде емес, байттар ағыны ретінде қарастырады. Макро кеңейтуді көрсету үшін ешқандай арнайы белгі талап етілмейді, бұл оны кез келген мәтінді өңдеу үшін ерекше пайдалы етеді. Мәтінді алмастыру қарапайым (мысалы, PIG сөзі DOG сөзімен алмастырылуы керек) немесе күрделі (мысалы, соңғы толық тоқтан кейінгі үшінші және төртінші үтірлер арасындағы элементті бір санауіштің мазмұнымен алмастыру) болуы мүмкін. ML/I портативті бағдарламалық құралдардың бірнеше бөліктерін, соның ішінде өзін іске асыру үшін қолданылды. Ол бастапқыда арнайы сипаттамалық тілде жазылған, содан кейін әрбір мақсатты жүйеге сәйкес тілге түрлендірілген. Бұл түрлендіру ML/I-нің өзі арқылы жасалған. Бұл сипаттамалық тілдің екі түрі болды: жоғары деңгейлі және төмен деңгейлі. Осы түрлендіруден кейін ML/I жиі жүйелік іске асыру тілдерін (SIL, мысалы C) 16 биттік архитектуралы миникомпьютерлердің жаңа буыны үшін іске асыруға пайдаланылды.

ML/1 қалай жұмыс істейді

Ең қарапайым түсінік бойынша, ML/1 былай жұмыс істейді. Пайдаланушы ML/1-ге кіріс мәтінін қамтитын файлды ұсынады. Тағы бір файлда (немесе, қалауынша, сол файлдың ішінде) пайдаланушы ML/1 макростары жиынтығын ұсынады. Макростар ML/1 интерпретаторына пайдаланушы кіріс мәтініне қандай қосымшалар, жоюлар, кеңейтулер, аудармалар және басқа да өзгерістер енгізуді қалап отырғанын көрсетеді. ML/1 кіріс мәтінімен іске қосылғанда, ML/1 макростардағы нұсқауларды орындайды, мәтінді өзгертеді және өзгертілген мәтінді қамтитын жаңа файлды жасайды.

ML/1 ерекшеліктері

ML/1 қарапайым "сканерлеу және ауыстыру" құралдардан әлдеқайда қуатты. ML/1 мәтінді таңбалар тізбегі бойынша емес, сөзбе-сөз (немесе ML/1 терминологиясында "атомнан атомға") негізде өңдейді. Көптеген қолданбалар үшін мәтінді таңбалар тізбегі ретінде емес, атомдар тізбегі ретінде өңдеу өте пайдалы. Мысалы, DO END синтаксисі бар бағдарламалау тілінен BEGIN END синтаксисі бар тілге бағдарламаны аударуды қалаймыз делік. Сондықтан "DO" сөзін "BEGIN" сөзімен алмастырамыз. Егер біз алмастыруды қарапайым сканерлеу және ауыстыру құралымен жасасақ, "DO" жолының барлық кездесулері "BEGIN" деп өзгереді, соның ішінде "DOCUMENT" сияқты сөздерге кіріктірілген "DO" да (олар "BEGINCUMENT" болады). ML/1-де мұндай болмайды, өйткені "DO" тізбегі тек сөз ретінде кездескенде ғана мәтін алмастырылады (яғни, оған бос орын, табуляция, жаңа жол немесе тыныш белгілер сияқты шектеушілер алдынан және артынан келуі керек). ML/1 жол бойынша жұмыс істемей, өте күрделі, ұялы, бірнеше делимитаторлы және көптеген жолдарды қамтитын мәтін үлгілерін таниды. Мысалы, ML/1 бірнеше жолды қамтитын және ішкі мәтінді қамтитын, сонымен қатар ішкі IF THEN ELSE ENDIF құрылымын қамтитын, жалпы бағдарламалау тіліндегі IF THEN ELSE ENDIF сияқты үлгілерді өңдеуге қабілетті. ML/1 кіріктірілген түсініктемелерді және әдебиеттік цитаталарды таниды және оларды өзгертуден қорғайды. Қарапайым сканерлеу және ауыстыру құралдары жолдарды ешқандай ажыратымсыз өзгертеді, олар бағдарлама мәтінінде кілт сөз немесе айнымалы атауы ретінде, түсініктемеге енгізілген немесе цитаталанған мәтінде кездессе де. Мұндай күрделі үлгілермен айналысу үшін ML/1 өзі жеке бағдарламалау тілі болуы керек. Басқа бағдарламалау тілдері сияқты ML/1 де айнымалылар мен тағайындау операторларын, GOTO және белгілерді, IF THEN тестілерін және циклдарды қолдайды. Бұл мүмкіндіктер ML/1-ге ерекше қуат пен икемділік береді.

Шектеулер

ML/1 әріптердің үлкен не кішкентай екеніне назар салады, сондықтан әріптерді ерекшелемейтін мәтінді өңдеуге қолдау көрсетпейді.