วิชาวิทยาศาสตร์คอมพิวเตอร์ใดบ้างที่จำเป็นต้องทำตามหลักสูตรเบื้องต้นในคอมไพเลอร์ [ปิด]


10

ฉันไม่ใช่วิทยาการคอมพิวเตอร์ระดับปริญญาตรีและทำงานเป็นนักพัฒนาเว็บ (java, python, AS3 ฯลฯ ) ในฐานะมืออาชีพ ฉันเรียน 1 หลักสูตรต่อภาคการศึกษาที่มหาวิทยาลัยท้องถิ่นของฉัน ฉันใช้ปัญญาประดิษฐ์ (ประกอบด้วยตรรกะไวยากรณ์อิสระบริบทการแยกคำ CYK เบื้องต้น NLP โซ่มาร์คอฟ HMM ฯลฯ ) ภาคการศึกษาสุดท้าย

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

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

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


1
ขึ้นอยู่กับโรงเรียนของคุณ ฉันไม่ได้เป็นเรื่องยากดังนั้นสิ่งที่ต้องมีก่อนคือโครงสร้างข้อมูลพื้นฐานและอัลกอริธึมพื้นฐาน - นั่นคือทั้งหมด น่าเสียดายที่พวกเขาทำคอมไพเลอร์เป็นตัวเลือกและฉันก็สับสนและไม่ได้ใช้มัน
งาน

คำตอบ:


8

คุณควรเข้าใจอย่างง่ายในหัวข้อต่อไปนี้:

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

เป็นทางเลือกและอาจจะช่วยได้มาก:

  • การออกแบบระบบปฏิบัติการ (การจัดการกระบวนการการออกแบบเคอร์เนลการซิงโครไนซ์การกำหนดเวลาเหตุการณ์ล็อคเธรดและสแต็ค vs ฮีป)

4

ฉันได้ทำการเขียนคอมไพเลอร์ของตัวเองมาบ้างแล้วและฉันบอกว่าสิ่งที่จำเป็นต้องมีก่อนคือความเข้าใจอย่างถ่องแท้ถึงสิ่งที่คุณจะได้รับในคลาส Data Structures โดยเฉพาะอย่างยิ่งถ้าคุณไม่เข้าใจการเรียกซ้ำต้นไม้และแผนที่ / ตารางแฮชคุณจะต้องสูญเสียอย่างรวดเร็วในการเรียนรู้วิธีสร้างคอมไพเลอร์


3

คุณจะต้องมีพื้นหลังพื้นฐานบางอย่างในสถาปัตยกรรมคอมพิวเตอร์ (ลงทะเบียน, หน่วยความจำ, ลงทะเบียนวัตถุประสงค์พิเศษ ฯลฯ ) และเคยเห็นรหัสประกอบบางส่วนมาก่อน มันจะดียิ่งขึ้นถ้าคุณได้เขียนรหัสการประกอบบางส่วนมาก่อนดังนั้นคุณจึงมีความเข้าใจที่ถูกต้องเกี่ยวกับการทำงานของภาษาเครื่อง

ขึ้นอยู่กับระดับของหลักสูตรอาจเป็นที่คาดหวังว่าคุณจะรู้เล็กน้อยเกี่ยวกับการประมวลผลซูเปอร์คาร์และอื่น ๆ


1
สิ่งนี้เป็นจริงเฉพาะถ้าเราคิดว่าคอมไพเลอร์ที่มีปัญหากำลังสร้างรหัสเครื่องและไม่ใช่รหัสไบต์
Mason Wheeler

3

หากนี่คือทุกอย่างเช่นคลาสคอมไพเลอร์ที่ฉันนำกลับมาในช่วงปลายยุคครีเทเชียส (แคลิฟอร์เนียปี 1988) สิ่งที่จำเป็นต้องมีจริงเพียงอย่างเดียวคือโครงสร้างข้อมูล (ต้นไม้และตารางแฮชโดยเฉพาะ) ภาษาแอสเซมบลีบางตัว สถาปัตยกรรมคอมพิวเตอร์บางอย่างและคลาสใดก็ตามที่จะสอนสิ่งต่าง ๆ เช่นนิพจน์ปกติขอบเขตออโตมาตะเครื่องทัวริง ฯลฯ แม้ว่าสิ่งเหล่านั้นอาจถูกครอบคลุมเป็นส่วนหนึ่งของหลักสูตรคอมไพเลอร์เอง (FWIW ฉันไม่ได้) คุณจะต้องแน่ใจว่าคุณเข้าใจการสอบถามซ้ำ


2

คุณอาจจะต้องเรียนหลักสูตรเกี่ยวกับแบบจำลองและภาษาที่เป็นทางการเช่นกัน สิ่งใดก็ตามที่ครอบคลุมถึงลำดับชั้นของ Chompsky ขั้นพื้นฐานก็น่าจะดี: ภาษาปกติ + ภาษาฟรีตามบริบท นี่เป็นเพราะมันเป็นสิ่งสำคัญที่จะต้องเข้าใจรากฐานทางคณิตศาสตร์ของการแยกวิเคราะห์เพื่อให้ตัวแยกวิเคราะห์ของคุณสะอาด, มีประสิทธิภาพและถูกต้อง ฉันคิดว่าคลาสคอมไพเลอร์ที่ดีมักจะครอบคลุมทั้ง parsers ปกติและ LALR / LL (k) parsers และทฤษฎีที่อยู่เบื้องหลังพวกเขา


0

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


0

ขึ้นอยู่กับสถาบันของคุณ แต่ส่วนใหญ่ต้องการข้อกำหนดเบื้องต้นเหล่านี้:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.