Phase vs Pass შემდგენელში
ზოგადად, კომპილერი არის კომპიუტერული პროგრამა, რომელიც კითხულობს ერთ ენაზე დაწერილ პროგრამას, რომელსაც ეწოდება საწყისი ენა, და თარგმნის მას სხვა ენაზე, რომელსაც ეწოდება სამიზნე ენა. ტრადიციულად, საწყისი ენა იყო მაღალი დონის ენა, როგორიცაა C++ და სამიზნე ენა იყო დაბალი დონის ენა, როგორიცაა ასამბლეის ენა. ასე რომ, ზოგადად შემდგენლები შეიძლება ჩაითვალოს მთარგმნელებად, რომლებიც თარგმნიან ერთი ენიდან მეორეზე. Pass და Phase არის ორი ტერმინი, რომელიც ხშირად გამოიყენება შემდგენელებთან. შემდგენელის გავლების რაოდენობა არის წყაროზე გადასვლის რაოდენობა (ან მისი წარმოდგენის რაიმე ფორმა).კონსტრუქციის მოხერხებულობისთვის შემდგენელი იყოფა ნაწილებად. ფაზა ხშირად გამოიყენება შემდგენელის ასეთი ცალკეული დამოუკიდებელი ნაწილის გამოსაძახებლად.
რა არის საშვი შემდგენელში?
კომპილატორების კლასიფიკაციის სტანდარტული გზაა "გასვლების" რაოდენობის მიხედვით. ჩვეულებრივ, კომპილაცია შედარებით რესურსზე ინტენსიური პროცესია და თავდაპირველად კომპიუტერებს არ ჰქონდათ საკმარისი მეხსიერება ისეთი პროგრამის შესანახად, რომელიც სრულ სამუშაოს ასრულებდა. ადრეულ კომპიუტერებში ტექნიკის რესურსების ამ შეზღუდვის გამო, შემდგენელები დაიშალა უფრო მცირე ქვეპროგრამებად, რომლებმაც თავიანთი ნაწილობრივი სამუშაო შეასრულეს წყაროს კოდის გადახედვით (გააკეთეს „გადავლება“წყაროზე ან მის სხვა ფორმაზე) და შეასრულეს ანალიზი., გარდაქმნები და მთარგმნელობითი ამოცანები ცალკე. ასე რომ, ამ კლასიფიკაციიდან გამომდინარე, შემდგენელები იდენტიფიცირებულია როგორც ერთგადასასვლელი ან მრავალპასიანი შემდგენლები.
როგორც სახელი გვთავაზობს, ერთი გადასასვლელი შემდგენელები აწყობენ ერთ პასს. უფრო ადვილია ერთგადასასვლელი შემდგენელის დაწერა და ასევე ისინი უფრო სწრაფად მუშაობენ, ვიდრე მრავალპასიანი შემდგენელები.ამიტომ, მაშინაც კი, როცა რესურსების შეზღუდვა გქონდა, ენები ისე იყო შექმნილი, რომ მათი შედგენა შესაძლებელი იყო ერთჯერადად (მაგ. პასკალი). მეორეს მხრივ, ტიპიური მრავალპასიანი შემდგენელი შედგება რამდენიმე ძირითადი ეტაპისგან. პირველი ეტაპი არის სკანერი (ასევე ცნობილია, როგორც ლექსიკური ანალიზატორი). სკანერი კითხულობს პროგრამას და გარდაქმნის მას ტოკენების სტრიქონად. მეორე ეტაპი არის პარსერი. ის აკონვერტებს ჟეტონების სტრიქონს გაანალიზებულ ხედ (ან აბსტრაქტულ სინტაქსურ ხედ), რომელიც ასახავს პროგრამის სინტაქსურ სტრუქტურას. შემდეგი ეტაპი არის სინტაქსური სტრუქტურის სემანტიკის ინტერპრეტაცია. კოდის ოპტიმიზაციის ეტაპები და კოდის საბოლოო გენერირების ეტაპი შემდეგია.
რა არის ფაზა შემდგენელში?
ტერმინი ფაზა ხშირად ჩნდება, როდესაც საუბრობთ კომპილერის კონსტრუქციაზე. თავდაპირველად, შემდგენელები იყო ერთიანი, მონოლითური პროგრამული უზრუნველყოფის ყველა მარტივი ნაწილი, რომელიც დაწერილი იყო ერთი ადამიანის მიერ მარტივი ენის შედგენისთვის. მაგრამ როდესაც სათარგმნი ენის საწყისი კოდი რთული და დიდი ხდება, შემდგენელი დაიშალა მრავალ (შედარებით დამოუკიდებელ) ფაზად.სხვადასხვა ფაზის არსებობის უპირატესობა ის არის, რომ შემდგენელის განვითარება შეიძლება განაწილდეს დეველოპერების გუნდს შორის. გარდა ამისა, ის აუმჯობესებს მოდულარობას და ხელახლა გამოყენებას, რაც საშუალებას აძლევს ფაზებს შეიცვალოს გაუმჯობესებული ფაზებით ან დამატებითი ფაზები (როგორიცაა შემდგომი ოპტიმიზაცია) დაემატოს კომპილატორს. კომპილაციის ფაზებად დაყოფის პროცესი დაინერგა კარნეგი მელონის უნივერსიტეტში PQCC (Production Quality Compiler-Compiler Project) მიერ. მათ შემოიღეს ტერმინები front end, Middle end და back end. შემდგენელთა უმეტესობას აქვს მინიმუმ ორი ფაზა. მაგრამ, როგორც წესი, უკანა ბოლო და წინა ბოლო აერთიანებს ამ ფაზებს.
რა განსხვავებაა Phase-სა და Pass-ს შორის Compiler-ში?
Phase და Pass არის ორი ტერმინი, რომელიც გამოიყენება შემდგენელთა ზონაში. გადასასვლელი არის ერთჯერადი დრო, როდესაც შემდგენელი გადასცემს (გადის) წყაროს კოდს ან მის სხვა წარმოდგენას. როგორც წესი, შემდგენლების უმეტესობას აქვს მინიმუმ ორი ფაზა, რომელსაც ეწოდება წინა და უკანა დასასრული, ხოლო ისინი შეიძლება იყოს ერთგადასასვლელი ან მრავალპასიანი.ფაზა გამოიყენება კომპილატორების კლასიფიკაციისთვის კონსტრუქციის მიხედვით, ხოლო pass გამოიყენება კომპილატორების კლასიფიკაციისთვის მათი მოქმედების მიხედვით.