Кіріспе

Компьютерлік кодты машинамен оқылатын түрге түрлендіру

Компьютерлік есептеуде кодты жасау – компилятордың процестік тізбегінің бір бөлігі болып табылады және бастапқы кодтың аралық өрнегін мақсатты жүйеде оңай орындалатын формаға (мысалы, машина коды) түрлендіреді. Күрделі компиляторлар әдетте әртүрлі аралық формалар бойынша бірнеше рет өтеді. Бұл көп сатылы процесс кодты оңтайландыру алгоритмдерінің көптеген түрлерін біртіндеп қолдануға немесе бір оңтайландырудың нәтижесі екінші оңтайландырудың аяқталған өңдеуіне байланысты болғандықтан қолданылады. Бұл құрылым бірнеше архитектураны қолдайтын бір компиляторды құруды жеңілдетеді, себебі кодты жасау кезеңдерінің соңғысы ғана (бэкэнд) мақсатты жүйеге қарай өзгереді. (Компиляторды құру туралы толық ақпаратты Compiler бетінен қараңыз.) Кодты жасаушының кірісі әдетте синтаксистік талдау ағашы немесе абстрактілі синтаксистік ағаштан тұрады. Ағаш сызықтық нұсқаулар тізбегіне айналады, әдетте үш адрес коды сияқты аралық тілде. Компиляцияның келесі кезеңдері бағдарламаның өрнегінде маңызды өзгерістер болса, "кодты жасау" деп аталуы мүмкін, болмауы мүмкін. (Мысалы, "тесікше" оңтайландыру кезеңі "кодты жасау" деп аталмайды, бірақ кодты жасаушыға "тесікше" оңтайландыру кезеңін қосу мүмкін.)

Орындау уақытында кодты құру

Кодты құру орындалу кезінде жүргенде, мысалы, уақытында компиляциялау (JIT) кезінде, бүкіл процестің уақыт және жад тұрғысынан тиімді болуы қажет. Мысалы, егер тұрақты өрнектер интерпретацияланып, орындалу кезінде кодты құру үшін қолданылса, детерминистік емес шекті автомат детерминистік автоматтың орнына көбінесе жасалады, себебі әдетте біріншісі тезірек құрылады және соңғысынан аз жад алады. Тиімділігі төмен кодтар жасалғанымен, JIT кодты құру орындалу кезінде ғана қолжетімді болатын профильдеу ақпаратын пайдалана алады.

Қарым-қатынас ұғымдары

Бір тілдегі деректерді қабылдап, едәуір өзгеше тілде нәтиже шығарудың негізгі міндеті формалды тіл теориясының негізгі түрлендіру операциялары арқылы түсіндіріледі. Осының салдарынан, бастапқыда компиляторларда қолдану үшін жасалған кейбір техникалар басқа мақсаттарда да пайдаланыла бастады. Мысалы, YACC (Yet Another Compiler Compiler) Backus–Naur пішіміндегі деректерді қабылдап, оны C тіліндегі синтаксистік талдаушыға айналдырады. Ол бастапқыда компилятор үшін синтаксистік талдаушыны автоматты түрде жасау үшін құрастырылған болса да, yacc жиі спецификациялар өзгелген сайын өзгерістерді енгізу қажеттігі туындайтын кодты жазуды автоматтандыру үшін қолданылады. Көптеген интеграцияланған даму орталары (IDE) автоматты бастапқы кодты генерациялаудың әртүрлі формаларын қолдайды, көбінесе компиляторлық код генераторларымен ортақ алгоритмдерді пайдаланады, бірақ көбінесе одан әлдеқайда қарапайым. (Сондай-ақ қараңыз: Бағдарламаны түрлендіру, Деректерді түрлендіру.)

Ойлану

Жалпы, синтаксис және семантикалық талдаушы бастапқы кодтан бағдарламаның құрылымын алуға тырысады, ал код генераторы осы құрылымдық ақпаратты (мысалы, деректер түрлерін) код жасау үшін пайдаланады. Басқаша айтқанда, біріншісі ақпаратты қосады, ал екіншісі ақпараттың бір бөлігін жоғалтады. Осы ақпарат жоғалтудың бір салдары – рефлексия қиынға соғады немесе тіпті мүмкін болмайды. Бұл мәселені шешу үшін код генераторлары орындалуға қажетті кодқа қосымша синтаксистік және семантикалық ақпаратты да қосады.