ᲙომპიუტერებიᲞროგრამირება

Მთარგმნელი არის ... მთარგმნელთა ტიპები. პროგრამის გადაკეთება და თარგმნა

პროგრამები, ადამიანების მსგავსად, თარჯიმანს ან თარჯიმანს სჭირდება ერთი ენადან თარგმნა.

ძირითადი ცნებები

პროგრამა არის გამოთვლილების ლინგვისტური წარმომადგენლობა: i → P → P (i). თარჯიმანი არის პროგრამა, რომელიც შედის input P- სა და ზოგიერთი შეყვანის მონაცემების x. იგი ასრულებს P- ს: I (P, x) = P (x). ის ფაქტი, რომ არსებობს ერთიანი თარჯიმანი, რომელსაც შეუძლია ყველა შესაძლო პროგრამების შესრულება (რომელიც შეიძლება ფორმალურ სისტემაში იყოს წარმოდგენილი) არის ძალიან ღრმა და მნიშვნელოვან აღმოჩენაში ტუინგი.

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

ზოგიერთი სახის მთარგმნელს აქვს ძალიან უცნაური სახელები:

  • Assembler თარგმნის პროგრამების assembler შევიდა მანქანა ენაზე.
  • შემდგენელი ითარგმნება მაღალ დონეზე ენის ქვედა დონის ენაზე.

თარჯიმანი არის პროგრამა, რომელიც იღებს პროგრამას ზოგიერთი ენის S როგორც მისი შეყვანა და აწარმოებს პროგრამას T- ს ისე, რომ ორივე მათგანს აქვს იგივე სემანტიკა: P → X → Q. ეს არის ∀x. P (x) = Q (x).

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

წყაროს კოდი → შემდგენელი (შემდგენელი) → Assembler code → Assembler (თარჯიმანი) → მანქანა კოდი → CPU (თარჯიმანი).

ონლაინ ან დინამიური კრებული ხდება თუ პროგრამის ნაწილი თარგმნილია, როდესაც სხვა შედგენილი ნაწილები შესრულებულია. JIT- მთარგმნელთა გახსოვთ ის, რაც მათ უკვე გააკეთეს, ისე, რომ არ გაიმეოროთ კოდს ისევ და ისევ. მათ შეუძლიათ აწარმოონ ადაპტაციური შედგენა და რეკოპილაცია, რაც დამოკიდებულია Runtime გარემოში.

ბევრი ენა მოგცემთ თარგმნის დროს კოდის შეასრულოს და კოდის ახალ კოდს შეასრულებთ.

თარგმანის ეტაპები

თარგმანში შედგება ანალიზისა და სინთეზის ეტაპები:

კოდის → ანალიზატორი → კონცეპტუალური ხედი → გენერატორი (სინთეზატორი) → სამიზნე კოდი.

ეს არის შემდეგი მიზეზების გამო:

  • სხვა მეთოდი არ არის შესაფერისი. სიტყვა-სიტყვით სიტყვა უბრალოდ არ მუშაობს.
  • კარგი საინჟინრო გადაწყვეტა: თუ საჭიროა M- ენების ენების და ენობრივი ენების თარჯიმნების დაწერა, საჭიროა მხოლოდ M + N მარტივი პროგრამების (სემინომპილერები) და არა M × N კომპლექსი (სრული თარჯიმანი).

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

ნამდვილი კომპილერები გადის ბევრ ეტაპს. თქვენი საკუთარი შემდგენლის შექმნისას თქვენ არ უნდა გავიმეოროთ ყველა იმ რთული სამუშაო, რომელიც ხალხმა უკვე გააკეთა შეხედულებების და გენერატორების შექმნისას. თქვენ შეგიძლიათ თარგმნოთ თქვენი ენა პირდაპირ JavaScript ან C და გამოიყენოთ არსებული JavaScript ძრავები და C კომპილერები დანარჩენი. თქვენ ასევე შეგიძლიათ გამოიყენოთ არსებული შუალედური შეხედულებები და ვირტუალური მანქანები.

თარჯიმნის ჩანაწერი

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

არსებობს სამი სახის კომპილერები:

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

რატომ არის ეს მნიშვნელოვანი?

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

  • ტექსტების ფორმატირება;
  • შეკითხვის ენა მონაცემთა ბაზებთან;
  • გაფართოებული კომპიუტერული არქიტექტურა;
  • განზოგადებული ოპტიმიზაციის პრობლემები;
  • გრაფიკული ინტერფეისი;
  • სკრიპტის ენები;
  • კონტროლერები;
  • ვირტუალური მანქანები;
  • მანქანური თარგმანი

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

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

ყოვლისმომცველი ტექნოლოგია

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

  • ფორმალური ენის თეორია: გრამატიკა, დამუშავება, გამოთვლითი;
  • კომპიუტერული არქიტექტურა: ინსტრუქციის კომპლექტი, RISC ან CISC, პიპლინგი, კერნელი, საათის ციკლი და სხვ.
  • პროგრამირების ენების კონცეფციები: მაგალითად, თანმიმდევრული კონტროლი, პირობითი შესრულება, გაერთიანება, რეკურსია, ფუნქციონალური დაშლა, მოდულარობა, სინქრონიზაცია, მეტაპროგრამირება, ფარგლები, მუდმივები, ქვეტექსები, შაბლონები, გამომავალი ტიპი, პროტოტიპები, ანოტაციები, თემა, მონები, საფოსტო ყუთები, გაფართოებები , ველური ბარათები, რეგულარული გამოხატვა, ტრანსაქციური მეხსიერება, მემკვიდრეობა, პოლიმორფიზმი, პარამეტრების რეჟიმი და სხვ.
  • აბსტრაქტული ენები და ვირტუალური მანქანები;
  • ალგორითმები და მონაცემთა სტრუქტურები: რეგულარული გამოხატვა, დამუშავების ალგორითმები, გრაფიკული ალგორითმები, დინამიური პროგრამირება, სწავლა;
  • პროგრამირების ენები: სინტაქსი, სემანტიკა (სტატიკური და დინამიური), პარადიგმების მხარდაჭერა (სტრუქტურული, OOP, ფუნქციონალური, ლოგიკური, დასტის, თანხვედრა, მეტაპროგრამა);
  • პროგრამული შექმნის (კომპლიერები, როგორც წესი, დიდი და რთული): ლოკალიზაცია, ქეშირება, კომპონენტირება, API- ინტერფეისი, ხელახალი გამოყენება, სინქრონიზაცია.

შემდგენლის შემუშავება

ზოგიერთი პრობლემა, რომელიც წარმოიქმნება რეალური მთარგმნელთა განვითარებისას:

  • პრობლემები წყაროს ენაზე. ადვილად შედგენა? არის თუ არა პრეპარატი? როგორ ხორციელდება ტიპები? არსებობს ბიბლიოთეკები?
  • დაჯგუფება შემდგენელი გადის: ერთი ან მრავალრიცხოვანი უღელტეხილი?
  • სასურველი ოპტიმიზაციის ხარისხი. პროგრამის სწრაფი და უწმინდური თარგმანი მცირეა ან არ არის ოპტიმიზაცია ნორმალურია. გადაჭარბებული ოპტიმიზაცია შეანელებს შემდგენელს, მაგრამ საუკეთესო კოდის დროს შეიძლება ღირს.
  • საჭირო შეცდომის გამოვლენის სიჩქარე. შეიძლება თუ არა თარჯიმანი შეჩერდეს პირველი შეცდომა? როდის უნდა შეწყვიტოს? ნუ ენდობით შემდგენელს შეცდომების გამოსასწორებლად?
  • ხელსაწყოების არსებობა. თუ წყაროს ენა არ არის ძალიან მცირე, სკანერი და ანალიზატორი გენერატორი სავალდებულოა. კოდური გენერატორების გენერატორებიც არიან, მაგრამ ისინი არ არიან ისეთი საერთო.
  • თაობის სამიზნე კოდი. თქვენ უნდა აირჩიოთ სუფთა, გაზრდილი, ან ვირტუალური მანქანა კოდიდან. ან უბრალოდ დაწერეთ შეყვანა, რომელიც ქმნის პოპულარული შუალედური შეხედულებებს, როგორიცაა LLVM, RTL, ან JVM. ან თარგმანის წყაროდან კოდის ან JavaScript- ში კოდის კოდისთვის.
  • სამიზნე კოდის ფორმატი. თქვენ შეგიძლიათ აირჩიოთ ასამბლეის ენა, პორტატული მანქანა კოდი, მეხსიერების გამოსახულების მანქანა კოდი.
  • პერენატელივიანი. ბევრი გენერატორით კარგია, რომ შეიტანოთ საერთო შეყვანის ნაწილი. იმავე მიზეზით, უმჯობესია ერთი შემადგენელი გენერატორი ბევრი შეყვანისთვის.

შემდგენელი არქიტექტურა: კომპონენტები

ეს არის თარჯიმნის ძირითადი ფუნქციონალური კომპონენტები, რომლებიც ქმნიან მანქანების კოდს (თუ გამომავალი პროგრამა C პროგრამა ან ვირტუალური მანქანაა, მაშინ საჭიროა არა ბევრი ნაბიჯი).

  • შეყვანის პროგრამა (ნიშნების ნაკადი) შევიდა სკანერი (ლექსიკური ანალიზატორი), რომელიც აკონვერტებს მას ნაკადი ნაკადის.
  • Parser (parser) აშენებს აბსტრაქტული სინტაქსი ხე მათგან.
  • სემანტიკური ანალიზატორი განადგურებს სემანტიკური ინფორმაციის და ამოწმებს ხეების კვანძების შეცდომებს. შედეგად, სემანტიკური გრაფა აშენდა - აბსტრაქტული სინტაქსი ხე დამატებითი თვისებები და დაყენებული ცნობები.
  • შუალედური კოდი გენერატორი აშენებს ნაკადის გრაფს (tuples დაჯგუფებულია ძირითად ბლოკებად).
  • მანქანა-დამოუკიდებელი კოდი ოპტიმიზატორი ასრულებს როგორც ადგილობრივ (ბაზის ბლოკში) და გლობალური (ყველა ბლოკისთვის) ოპტიმიზაციას, ძირითადად, სუბტროუინების შიგნით. ამცირებს გადაჭარბებულ კოდს და ადგენს გამოთვლებს. შედეგი არის შეცვლილი ნაკადი გრაფიკი.
  • სამიზნე კოდი გენერატორი აკავშირებს ბაზების ბლოკებს სწორი ხაზის კოდით კონტროლის გადაცემასთან, შეიქმნას ობიექტის ფაილი სამრეკლოს ვირტუალური რეესტებში (შესაძლოა არაეფექტური).
  • მანქანა დამოუკიდებელი ლინგერის ოპტიმიზატორი განათავსებს მეხსიერებას რეესტრებსა და გრაფიკების ბრძანებებს შორის. აკონვერტებს პროგრამის განხორციელებაში ნამდვილი აგენტი, რომელიც მიმართავს პიპინინგს.

გარდა ამისა, გამოყენებულია შეცდომის გამოვლენის ქვესისტემები და სიმბოლო მაგიდის მენეჯერი.

ლექსიკური ანალიზი (სკანირება)

სკანერი აკონვერტებს კოდის სიმბოლოების სიმბოლოს სიმბოლოების ნაკადში, სივრცეების მოხსნას, კომენტარებსა და მაკროების გაფართოებას.

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

შეცდომები, რომლებიც შეიძლება მოხდეს სკანირების დროს, ეწოდება ლექსიკურ და მოიცავს:

  • სიმბოლოები, რომლებიც არ არიან ანბანში;
  • სიტყვების ან სიმებიანი სიმბოლოების გადალახვა;
  • არ დახურული ხასიათი ან სიმებიანი ლიტერატურული;
  • დასასრულს ფაილი კომენტარში.

სინტაქსის ანალიზი (დამუშავება)

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

ამ ეტაპზე მომხდარი შეცდომები სინტაქსის შეცდომებს უწოდებენ. მაგალითად:

  • K = 5 * (7 - y;
  • J = / 5;
  • 56 = x * 4.

სემანტიკური ანალიზი

სემანტიკური ანალიზის დროს საჭიროა შეამოწმოს დასაშვებობის წესები და შეესაბამებოდეს სინტაქსის ნაწილის ნაწილაკების შედგენა (სახელებითა ნებართვის ნებართვა, სახეობების ჩანერგვის ოპერაციების ჩასმა და ა.შ.).

ცხადია, განსხვავებული ენების დასაშვებობის წესები განსხვავებულია. თუ ჯავაში მსგავსი ენები შედგენილია, თარჯიმნებს შეუძლიათ იპოვოთ:

  • ცვლადის მრავალრიცხოვანი დეკლარაციები მის ფარგლებს გარეთ;
  • ცვლადი მითითება მის დეკლარაციამდე;
  • გამონაკლისი სახელის მითითება;
  • ხელმისაწვდომობის წესების დარღვევა;
  • არგუმენტების ძალიან დიდი ან არასაკმარისი რაოდენობა მეთოდის გამოძახებისას;
  • გაცნობის შეუსაბამობა.

თაობა

შუალედური კოდის თაობა ქმნის ნაკადის გრაფს, რომელიც შედგება ფირფიტების ბლოკად.

კოდის თაობა აწარმოებს ნამდვილ მანქანას. RISC- საწარმოებისთვის ტრადიციული კომპილერები, პირველ ეტაპზე ქმნიან ინვესტორს ვირტუალური რეესტების უსასრულო რიცხვით. დსთ-ს აპარატებისთვის ეს არ მოხდება.

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 ka.delachieve.com. Theme powered by WordPress.