კომპილატორი

თავისუფალი ქართულენოვანი ენციკლოპედია ვიკიპედიიდან
გადასვლა: ნავიგაცია, ძიება
კომპილატორის მუშაობის ფაზები

კომპილატორიკომპიუტერული პროგრამა, რომელიც კითხულობს პროგრამას დაწერილს რომელიმე პროგრამირების ენაში ანუ წყარო ენაში და თარგმნის მას იდენტიურ პროგრამაში განსხვავებულ პროგრამირების ენაზე ანუ მიზნის ენაზე. კომპილატორის მნიშვნელოვანი თვისება არის წყარო ენაში შეცდომების პოვნა და შეძლებისდაგვარად მათი გამოსწორება ან მითითება. განმმარტებელი კითხულობს პროგრამას დაწერილს რომელიმე პროგრამირების ენაში და სხვა პროგრამირების ენაზე თარგმნის მაგივრად თვითონ ასრულებს წყარო ენაში მითითებულ ბრძანებებს.
მაგალითად ჯავაში ენის დამამუშავებელი იყენებს ორივე სისტემას. თავიდან ჯავაზე დაწერილი პროგრამა კომპილირდება შუამავალ პროგამაში ანუ ბაიტკოდში და შემდგომ ჯავა ვირტუალური მანქანის განმმარტებელი ასრულებს ბაიტკოდში მითიტებულ ბრძანებებს. იმის გამო რომ პროგრამების უმეტესობა მოთავსებულია ერთზე მეტ ფაილში, კომპილატორს, მიზნის მისაღწევად, შეიძლება სხვა პროგამების გამოყენება დასჭირდეს. ერთ ერთი მასეთი პროგრამა არის პრეპროცესორი, რომლის დანიშნულებაა შეაგროვოს სხვადასხვა ფაილებზე გაფანტული პროგრამა და გააფართოვოს მაკროები წყარო ენის გამოსახულებებში. ლინკერი გადაწყვეტილებებს ღებულობს გარე მეხსიერების მისამართების დანიშვნაზე სადაც ერთ ფაილში მოთავსებული გამოსახულება უთითებს სხვა ფაილში მათავსებულ პროგამის კოდს. ლოუდერს გადაყავს გასაშვები ობიექტის ფაილები მეხსიერებაში პროგრამის გასაშვებად.

კომპილატორის სტრუქტურა[რედაქტირება]

სტანდარტული კომპილატორი შედგება ორი ნაწილისგან: ანალიზი და სინთეზი. ანალიზი შლის წყარო ენას რამდენიმე ნაწილად და ადგენს ამ პროგრამის გრამატიკულ სტრუქტურას. ეს სტრუქტურა შემდგომ შუამავალი კოდის სახეს ღებულობს და სინტეზის ფაზაში განაგრძობს გადამუშავებას. ანალიზის დროს ხდება პროგრამის სინტატიკური და სემანტიკური შეცდომების დადგენა. გროვდება სხვადასხვა ინფორმაცია პროგრამის შესახებ და ხდება მათი შენახვა მონაცემთა სტრუქტურაში რომელსაც სიმბოლოების ცხრილი ეწოდება.
სინთეზის ფაზა შუალედური კოდის და სიმბოლოების ცხრილის გამოყენებით ქმნის სამიზნე პროგრამას. ანალიზის ნაწილს ხშირად წინა ნაწყვეტს უწოდებენ, სინთეზის ნაწილს კი უკანა ნაწყვეტს.