คอมพิวเตอร์การเขียนโปรแกรม

โฆษก - คือ ... ประเภทของคอมไพเลอร์ แปลงและโปรแกรมการออกอากาศ

โปรแกรมเช่นเดียวกับคนที่จะแปลจากภาษาหนึ่งไปยังอีกที่ต้องการล่ามหรือนักแปล

แนวคิดพื้นฐาน

โปรแกรมที่เป็นตัวแทนทางภาษาของการคำนวณ: ฉัน→ P → P (i) ล่ามเป็นโปรแกรมที่จะถูกส่งไปยังโปรแกรมการป้อนข้อมูลที่ P และบางส่วนอินพุตเอ็กซ์ จะดำเนินการที่ P x: ผม (P, x) = P (x) ความจริงที่ว่ามีเพียงหนึ่งนักแปลที่มีความสามารถในการดำเนินการโปรแกรมเป็นไปได้ทั้งหมด (ซึ่งสามารถแสดงในระบบอย่างเป็นทางการ) เป็นลึกซึ้งมากอย่างมีนัยสำคัญและทัวริงค้นพบ

หน่วยประมวลผลเป็นล่ามของโปรแกรมในภาษาเครื่อง โดยทั่วไปมีราคาแพงเกินไปที่จะเขียนล่ามภาษาระดับสูงเพื่อให้พวกเขาแปลเป็นรูปแบบที่ง่ายต่อการตีความ

บางชนิดของนักแปลมีชื่อแปลกมาก:

  • แอสเซมแปลโปรแกรมภาษาประกอบเป็นภาษาเครื่อง
  • คอมไพเลอร์แปลภาษาระดับสูงให้เป็นภาษาที่ต่ำกว่า

โฆษก - เป็นโปรแกรมที่จะเป็นข้อมูลเข้าโปรแกรมในบางภาษา S และผลิตโปรแกรม T ในลักษณะที่พวกเขาทั้งสองมีความหมายเดียวกันที่: P → X → Q. นั่นคือ∀x P (x) = Q (x)

หากออกอากาศโปรแกรมทั้งหมดเป็นสิ่งที่ interpretable จะเรียกว่าการสะสมก่อนที่จะดำเนินการหรือทอทรวบรวม ทอทคอมไพเลอร์สามารถนำมาใช้ในชุดหลังซึ่งมักจะเป็นผู้ประกอบการตัวอย่างเช่น:

แหล่งที่มาคอมไพเลอร์รหัส→ (ผู้แปล) →→รหัสการชุมนุมประกอบ (compiler) →→ซีพียูรหัสเครื่อง (ล่าม)

การดำเนินงานหรือแบบไดนามิกสะสมเกิดขึ้นหากโปรแกรมมีการออกอากาศเมื่อดำเนินการโดยส่วนหนึ่งรวบรวมไว้ก่อนหน้าอื่น ๆ JIT-คอมไพเลอร์จำได้ว่าสิ่งที่พวกเขาได้ทำมาแล้วเพื่อที่จะไม่ทำซ้ำรหัสที่มาอีกครั้งและอีกครั้ง พวกเขายังสามารถผลิตสะสมและปรับ recompilation ขึ้นอยู่กับพฤติกรรมของสภาพแวดล้อมการทำงานของโปรแกรมที่

หลายภาษาอนุญาตให้มีการรันโค้ดที่รวบรวมเวลาและรวบรวมรหัสใหม่ที่รันไทม์

ขั้นตอนการแปล

ออกอากาศประกอบด้วยขั้นตอนของการวิเคราะห์และสังเคราะห์นี้:

แหล่งที่มารหัสวิเคราะห์→→→แนวคิดกำเนิดตัวแทน (สังเคราะห์) →รหัสเป้าหมาย

เพราะนี่คือเหตุผลเหล่านี้:

  • วิธีการอื่นใดที่ไม่เหมาะสม คำแปลก็ไม่ทำงาน
  • วิธีการแก้ปัญหาทางวิศวกรรมที่ดี: ถ้าคุณต้องการที่จะเขียนนักแปลของ M และ N ภาษาแหล่งที่มาของการกำหนดเป้าหมายจำเป็นต้องเขียนโปรแกรมเพียงง่ายๆ M + N (polukompilyatorov) มากกว่า M × N ซับซ้อน (รวมของนักแปล)

แต่ในทางปฏิบัติมีมุมมองความคิดของไม่ค่อยแสดงออกเพียงพอและมีประสิทธิภาพเพียงพอที่จะครอบคลุมทุกแหล่งที่มาและเป้าหมายเท่าที่จะนึกออกภาษา ขณะที่บางคนก็สามารถที่จะเข้ามาใกล้จะถึงนี้

คอมไพเลอร์จริงผ่านหลายขั้นตอน เมื่อมีการสร้างคอมไพเลอร์ของคุณเองไม่จำเป็นต้องทำซ้ำทั้งหมดทำงานอย่างหนักว่าคนที่ได้ทำเพื่อสร้างการแสดงและเครื่องกำเนิดไฟฟ้า คุณสามารถแปลภาษาของคุณโดยตรงใน JavaScript หรือ C และใช้ประโยชน์จากที่มีอยู่ JavaScript เครื่องยนต์และเรียบเรียง C ที่จะทำส่วนที่เหลือ นอกจากนี้คุณยังสามารถใช้ที่มีอยู่กลางเป็นตัวแทนและ เสมือนเครื่อง

บันทึกการแปล

โฆษก - เป็นโปรแกรมหรือฮาร์ดแวร์ที่เกี่ยวข้องกับสามภาษา: แหล่งที่มาของปลายทางและฐาน พวกเขาสามารถเขียนได้ใน T-shape, วางซ้ายเดิมขวาและฐานเป้าหมายด้านล่าง

มีสามประเภทของคอมไพเลอร์คือ:

  • โฆษก - เป็น samokompilyator ถ้ามันสอดคล้องกับพื้นฐานภาษาต้นฉบับ
  • คอมไพเลอร์ภาษาที่กำหนดเป้าหมายเป็นพื้นฐานที่เรียกว่า samorezidentnym
  • โฆษก - ข้ามคอมไพเลอร์ถ้าเขามีการกำหนดเป้าหมายและภาษาต่างๆขั้นพื้นฐาน

นี่คือเหตุผลที่สำคัญหรือไม่

แม้ว่าคุณจะไม่ทำให้คอมไพเลอร์จริงความรู้ที่ดีของเทคโนโลยีของการสร้างเพราะแนวคิดใช้เพื่อการนี้ถูกนำมาใช้กันอย่างแพร่หลายเช่น:

  • จัดรูปแบบข้อความ;
  • คำสั่งภาษา ฐานข้อมูล;
  • สถาปัตยกรรมคอมพิวเตอร์ขั้นสูง
  • ปัญหาการเพิ่มประสิทธิภาพทั่วไป;
  • GUIs;
  • ภาษาสคริปต์;
  • ควบคุม;
  • เครื่องเสมือน;
  • เครื่องแปลภาษา

นอกจากนี้หากคุณต้องการที่จะเขียน preprocessors, Linkers, รถตัก, แก้จุดบกพร่องและโปรคุณต้องไปผ่านขั้นตอนเช่นเดียวกับเมื่อเขียนคอมไพเลอร์

นอกจากนี้คุณยังสามารถเรียนรู้วิธีการเขียนโปรแกรมที่ดีขึ้นนับตั้งแต่การสร้างของนักแปลภาษาหมายถึงความเข้าใจที่ดีขึ้นของความซับซ้อนและความคลุมเครือของมัน การศึกษาหลักการทั่วไปของการออกอากาศยังช่วยให้คุณกลายเป็นภาษาออกแบบที่ดี ดังนั้นมันไม่สำคัญว่าสูงชันภาษาหากไม่สามารถดำเนินการได้อย่างมีประสิทธิภาพ?

เทคโนโลยีที่ครอบคลุม

เทคโนโลยีคอมไพเลอร์ครอบคลุมพื้นที่ที่แตกต่างของวิทยาการคอมพิวเตอร์:

  • ทฤษฎีอย่างเป็นทางการของภาษา: ไวยากรณ์แยกคำนวณ;
  • สถาปัตยกรรมคอมพิวเตอร์:. การเรียนการสอนชุด RISC หรือ CISC, ไปป์ไลน์การประมวลผลหลักรอบนาฬิกา ฯลฯ
  • แนวคิดของการเขียนโปรแกรมภาษาเช่นการดำเนินการควบคุมลำดับการดำเนินการตามเงื่อนไขย้ำเรียกซ้ำสลายการทำงานต้นแบบประสานเมตาเขียนโปรแกรมขอบเขตคงประเภทย่อยแม่แบบประเภทเอาท์พุต้นแบบคำอธิบายประกอบไหล monads กล่องจดหมายให้ดำเนินการต่อ สัญลักษณ์แสดงออกปกติหน่วยความจำในการทำธุรกรรม, มรดก, polymorphism การตั้งค่าโหมดและอื่น ๆ ฯลฯ ..;
  • ภาษานามธรรมและเครื่องเสมือน;
  • ขั้นตอนวิธีและ โครงสร้างข้อมูล: การแสดงออกปกติขั้นตอนวิธีการแยกวิเคราะห์อัลกอริทึมกราฟิก, การเขียนโปรแกรมแบบไดนามิก การฝึกอบรม
  • การเขียนโปรแกรมภาษา: ไวยากรณ์ความหมาย (แบบคงที่และแบบไดนามิก) กระบวนทัศน์การสนับสนุน (โครงสร้าง OOP ทำงานตรรกะกองขนาน meta-การเขียนโปรแกรม);
  • ซอฟแวร์การสร้าง (คอมไพเลอร์มักจะมีขนาดใหญ่และซับซ้อน): แปล, แคช componentize, API-อินเตอร์เฟซกลับมาใช้การประสาน

การออกแบบคอมไพเลอร์

บางส่วนของปัญหาที่พบในการพัฒนาของนักแปลจริง:

  • มีปัญหากับภาษาต้นฉบับ มันเป็นเรื่องง่ายที่จะรวบรวมมันได้หรือไม่ มี preprocessor? วิธีนี้เป็นประเภทหรือไม่ มีห้องสมุด?
  • การจัดกลุ่มผ่านคอมไพเลอร์: เดียวหรือหลายวิธี?
  • การศึกษาระดับปริญญาของการเพิ่มประสิทธิภาพที่ต้องการ โปรแกรมการออกอากาศได้อย่างรวดเร็วและไม่สะอาดด้วยการเพิ่มประสิทธิภาพน้อยหรือไม่มีเลยสามารถเป็นปกติ คอมไพเลอร์เพิ่มประสิทธิภาพเกินจะชะลอตัว แต่รหัสที่ดีกว่าที่รันไทม์อาจจะคุ้มค่า
  • การศึกษาระดับปริญญาที่จำเป็นของการตรวจสอบข้อผิดพลาด สามารถแปลได้หยุดเพียงแค่ที่ผิดพลาดครั้งแรก? เมื่อมันควรจะหยุด? ไม่ว่าจะไว้วางใจแก้ไขข้อผิดพลาดคอมไพเลอร์?
  • ความพร้อมใช้งานของเครื่องมือ ถ้าภาษาต้นฉบับไม่ได้มีขนาดเล็กมาก, สแกนเนอร์และเครื่องกำเนิดไฟฟ้าจะต้องวิเคราะห์ นอกจากนี้ยังมีเครื่องกำเนิดไฟฟ้า, เครื่องกำเนิดไฟฟ้ารหัส แต่พวกเขาจะไม่ธรรมดา
  • ประเภทรหัสเป้าหมายที่จะสร้าง ได้รับการคัดเลือกจากรหัสเครื่องบริสุทธิ์ที่เสริมหรือเสมือน หรือเพียงแค่เขียนส่วนรายการที่สร้างการแสดงกลางที่นิยมเช่น LLVM, RTL หรือ JVM หรือทำให้การแปลของเดิมในรหัสที่มาใน C หรือ JavaScript
  • รูปแบบของรหัสเป้าหมาย คุณสามารถเลือก ภาษาที่ประกอบ รหัสเครื่องพกพาภาพหน่วยความจำรหัสเครื่อง
  • การกำหนดเป้าหมายใหม่ เมื่อชุดของเครื่องกำเนิดไฟฟ้าเป็นสิ่งที่ดีที่จะมีส่วนเข้าร่วมกัน ด้วยเหตุนี้จึงเป็นที่ดีที่สุดที่จะมีหนึ่งเครื่องกำเนิดไฟฟ้าสำหรับการป้อนข้อมูลของหลายส่วน

คอมไพเลอร์สถาปัตยกรรมส่วนประกอบ

เหล่านี้เป็นส่วนประกอบที่สำคัญในการทำงานของคอมไพเลอร์ที่สร้างรหัสพื้นเมือง (ถ้ามีโปรแกรมออกเป็นโปรแกรมใน C หรือเครื่องเสมือนที่คุณไม่จำเป็นต้องหลายขั้นตอนเพื่อให้บริการ):

  • โปรแกรมการป้อนข้อมูล (เครื่องหมายไหล) จะถูกป้อนเข้าเครื่องสแกนเนอร์ (วิเคราะห์ศัพท์) ซึ่งแปลงเป็นกระแสของราชสกุล
  • Parser (parser) สร้างต้นไม้ต้นหนึ่งไวยากรณ์นามธรรม
  • การวิเคราะห์ความหมายสลายข้อมูลความหมายและการตรวจสอบโหนดสำหรับข้อผิดพลาด เป็นผลให้การสร้างความหมายกราฟ - ต้นไม้ไวยากรณ์นามธรรมที่มีคุณสมบัติเพิ่มเติมและการเชื่อมโยงที่จัดตั้งขึ้น
  • รหัสเครื่องกำเนิดไฟฟ้าระดับกลางสร้างกราฟการไหล (tuples ถูกแบ่งออกเป็นบล็อกหลัก)
  • เครื่องอิสระเพิ่มประสิทธิภาพรหัสดำเนินการทั้งในระดับท้องถิ่น (ภายในหน่วยฐาน) และระดับโลก (เพื่อบล็อคทั้งหมด) การเพิ่มประสิทธิภาพโดยทั่วไปที่เหลือภายในกิจวัตร ลดรหัสซ้ำซ้อนและลดความยุ่งยากในการคำนวณ ผลที่ได้คือกราฟการไหลของการปรับเปลี่ยน
  • เครื่องกำเนิดไฟฟ้าผูกรหัสเป้าหมายพื้นฐานเป็นรหัสควบคุมการส่งเป็นเส้นตรงสร้างลงทะเบียนเสมือนวัตถุไฟล์ประกอบ (อาจจะไม่ได้ผล)
  • เครื่องขึ้นอยู่กับการเพิ่มประสิทธิภาพลิงเกอร์จัดสรรหน่วยความจำระหว่างการลงทะเบียนและทำให้การวางแผนทีม จะดำเนินการแปลงโปรแกรมในภาษาการชุมนุมที่ชุมนุมนี้กับการใช้งานที่ดีของ pipelining

นอกจากนี้การใช้งานของผู้จัดการการตรวจสอบข้อผิดพลาดของระบบย่อยและตารางสัญลักษณ์

วิเคราะห์คำศัพท์ (สแกน)

สแกนเนอร์แปลงอักขระแหล่งกระแสเข้าไปในกระแสของสัญญาณการลบช่องว่างความคิดเห็นและแมโครขยาย

สแกนเนอร์มักจะพบปัญหาเช่นหรือไม่ที่จะคำนึงถึงกรณีที่อัตรากำไรขั้นต้นแบ่งบรรทัดและความคิดเห็นที่ฝังตัว

ข้อผิดพลาดที่อาจเกิดขึ้นระหว่างการสแกนที่เรียกว่าคำศัพท์และรวมถึง:

  • ตัวอักษรที่ไม่ได้อยู่ในตัวอักษร;
  • ส่วนที่เกินจากจำนวนตัวอักษรในคำหรือเส้น;
  • ไม่ได้เป็นสัญญาณปิดหรือสตริงตัวอักษร;
  • จุดสิ้นสุดของแฟ้มในความคิดเห็น

แยก (แยก)

ตัวแยกวิเคราะห์แปลงลำดับราชสกุลเป็นต้นไม้ไวยากรณ์นามธรรม โหนดในต้นไม้แต่ละครั้งจะถูกเก็บไว้เป็นวัตถุที่มีเขตข้อมูลชื่อหลายแห่งซึ่งเป็นตัวโหนต้นไม้ ในขั้นตอนนี้จะไม่มีวงจร เมื่อคุณสร้างแยกวิเคราะห์เป็นสิ่งจำเป็นที่จะใส่ใจกับระดับของความซับซ้อนของไวยากรณ์ (LL หรือ LR) และพบว่ามีผู้ใดแก้ความกำกวมกฎ บางภาษาจะต้องมีการวิเคราะห์ความหมาย

พบข้อผิดพลาดในขั้นตอนนี้จะเรียกว่าไวยากรณ์ ตัวอย่างเช่น:

  • k = 5 * (7 - Y;
  • J = / 5;
  • 56 = x * 4

การวิเคราะห์ความหมาย

ในระหว่าง การวิเคราะห์ความหมาย ในการตรวจสอบ permissibility ของกฎและชิ้นส่วนร่วมของต้นไม้แยกที่ (ให้ชื่ออ้างอิงแทรกการดำเนินงานสำหรับการแปลงชนิดนัยและอื่นง.) สำหรับการขึ้นรูปแบบของกราฟความหมาย

เห็นได้ชัดว่าชุดของภัณฑ์ของกฎในภาษาที่แตกต่างกันที่แตกต่างกัน หากคุณรวบรวมภาษา Java เหมือนคอมไพเลอร์อาจพบ:

  • ประกาศตัวแปรหลายภายในขอบเขตของตน
  • อ้างอิงถึงตัวแปรก่อนการประกาศ;
  • อ้างอิงถึงชื่อของผู้ที่ไม่ได้ประกาศนั้น
  • การละเมิดสิทธิในสิทธิบัตร;
  • จำนวนมากเกินไปหรือไม่เพียงพอของการขัดแย้งในวิธีการเรียก;
  • ประเภทไม่ตรงกัน

รุ่น

รหัสรุ่นระดับกลางผลิตกราฟการไหลประกอบด้วย tuples แบ่งออกเป็นพื้นฐาน

รุ่นรหัสผลิตรหัสเครื่องจริง ในคอมไพเลอร์แบบดั้งเดิมสำหรับ RISC เครื่องในขั้นตอนแรกคุณสร้างประกอบกับจำนวนอนันต์ของการลงทะเบียนเสมือน สำหรับ CISC เครื่องอาจจะไม่เกิดขึ้น

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

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