คำถามติดแท็ก compiler

คอมไพเลอร์เป็นโปรแกรมคอมพิวเตอร์ที่แปลงซอร์สโค้ดที่เขียนในภาษาโปรแกรมหนึ่งเป็นภาษาคอมพิวเตอร์อื่น

5
วิธีการเขียนคอมไพเลอร์ขั้นพื้นฐานมาก
คอมไพเลอร์ขั้นสูงเช่นgccรหัสคอมไพล์ลงในไฟล์ที่เครื่องสามารถอ่านได้ตามภาษาที่เขียนโค้ดนั้น (เช่น C, C ++ เป็นต้น) ในความเป็นจริงพวกเขาตีความความหมายของแต่ละรหัสตามห้องสมุดและฟังก์ชั่นของภาษาที่เกี่ยวข้อง ช่วยแก้ให้ด้วยนะถ้าฉันผิด. ฉันต้องการเข้าใจคอมไพเลอร์โดยการเขียนคอมไพเลอร์พื้นฐาน (อาจเป็น C) เพื่อคอมไพล์ไฟล์สแตติก (เช่น Hello World ในไฟล์ข้อความ) ฉันลองทำแบบฝึกหัดและหนังสือบางเล่ม แต่ทั้งหมดสำหรับกรณีจริง พวกเขาจัดการกับการรวบรวมรหัสแบบไดนามิกที่มีความหมายเชื่อมต่อกับภาษาที่เกี่ยวข้อง ฉันจะเขียนคอมไพเลอร์พื้นฐานเพื่อแปลงข้อความคงเป็นไฟล์ที่เครื่องอ่านได้อย่างไร ขั้นตอนต่อไปจะแนะนำตัวแปรในคอมไพเลอร์ ลองนึกภาพว่าเราต้องการเขียนคอมไพเลอร์ที่รวบรวมเฉพาะบางฟังก์ชั่นของภาษา ขอแนะนำบทเรียนและแหล่งข้อมูลเชิงปฏิบัติที่ได้รับความนิยมอย่างสูง :-)
214 c  compiler  compilation  gcc 

10
แฮ็คคอมไพเลอร์ของ Ken Thompson ยังคงเป็นภัยคุกคามหรือไม่?
แฮ็คทอม ธ อมป์สัน (1984) Ken Thompson ได้สรุปวิธีการที่จะคอมไพล์ไบนารีคอมไพเลอร์ (และซอฟต์แวร์ที่คอมไพล์อื่น ๆ เช่นสคริปต์การเข้าสู่ระบบในระบบ * nix) ในปี 1984 ฉันอยากรู้ว่าการคอมไพล์สมัยใหม่ได้แก้ไขข้อบกพร่องด้านความปลอดภัยนี้หรือไม่ คำอธิบายสั้น: เขียนรหัสคอมไพเลอร์ใหม่เพื่อให้มีข้อบกพร่อง 2 ข้อ: เมื่อรวบรวมไบนารีของตัวเองคอมไพเลอร์จะต้องรวบรวมข้อบกพร่องเหล่านี้ เมื่อรวบรวมรหัสที่เลือกล่วงหน้าอื่น ๆ (ฟังก์ชั่นเข้าสู่ระบบ) จะต้องรวบรวมลับๆโดยพลการ ดังนั้นคอมไพเลอร์ก็ทำงานได้ตามปกติ - เมื่อคอมไพล์สคริปต์ล็อกอินหรือคล้ายกันมันสามารถสร้างแบ็คดอร์ความปลอดภัยและเมื่อคอมไพล์เวอร์ชั่นใหม่ของตัวเองในอนาคตมันจะเก็บข้อบกพร่องก่อนหน้า - และข้อบกพร่องจะมีอยู่ในคอมไพเลอร์เท่านั้น ไบนารีดังนั้นจึงเป็นเรื่องยากมากที่จะตรวจจับ คำถาม: ฉันไม่สามารถหาคำตอบสำหรับสิ่งเหล่านี้บนเว็บ: สิ่งนี้เกี่ยวข้องกับการรวบรวมแบบทันเวลาได้อย่างไร ฟังก์ชั่นเหมือนกับการเข้าสู่ระบบการจัดการโปรแกรมบนระบบ * nix ถูกคอมไพล์เมื่อรันหรือไม่? สิ่งนี้ยังคงเป็นภัยคุกคามที่ถูกต้องหรือมีการพัฒนาด้านความปลอดภัยในการรวบรวมตั้งแต่ปี 1984 ที่ป้องกันไม่ให้เกิดปัญหาร้ายแรง สิ่งนี้มีผลกระทบต่อทุกภาษาหรือไม่ ทำไมฉันถึงอยากรู้? ฉันเจอสิ่งนี้ขณะทำการบ้านและมันก็น่าสนใจ แต่ฉันก็ขาดภูมิหลังที่จะเข้าใจอย่างเป็นรูปธรรมไม่ว่าจะเป็นปัญหาปัจจุบันหรือปัญหาที่แก้ไขแล้ว วัสดุอ้างอิง ภาพรวม บางรหัส
156 linux  unix  compiler  hacking 

5
ทำไม Java จึงไม่มีการปรับให้เหมาะสำหรับการเรียกซ้ำทั้งหมด
จากสิ่งที่ฉันได้อ่าน: เหตุผลก็เพราะมันไม่ง่ายที่จะตัดสินว่าวิธีการใดที่จะถูกเรียกตามที่เราได้รับมรดก อย่างไรก็ตามทำไม Java อย่างน้อยก็ไม่มีการปรับให้เหมาะสมแบบเรียกซ้ำสำหรับเมธอดแบบสแตติกและบังคับใช้วิธีที่เหมาะสมในการเรียกเมธอดแบบสแตติกกับคอมไพเลอร์? ทำไม Java ไม่ได้รับการสนับสนุนใด ๆ เลยสำหรับการเรียกซ้ำ? ฉันไม่แน่ใจว่ามีปัญหาใด ๆ หรือไม่ เกี่ยวกับคำแนะนำซ้ำตามที่อธิบายโดยJörg W Mittag 1 : อีกคำถามหนึ่งถามเกี่ยวกับ TCO คำถามนี้เกี่ยวกับ TRE TRE นั้นง่ายกว่า TCO มาก นอกจากนี้คำถามอื่นถามเกี่ยวกับข้อ จำกัด ที่ JVM กำหนดในการปรับใช้ภาษาที่ต้องการรวบรวม JVM คำถามนี้ถามเกี่ยวกับ Java ซึ่งเป็นภาษาหนึ่งที่ไม่ได้ถูก จำกัด โดย JVM เนื่องจาก JVM spec สามารถเปลี่ยนแปลงได้โดย คนเดียวกันที่ออกแบบ Java และสุดท้ายไม่มีข้อ จำกัด ใน JVM เกี่ยวกับ TRE …

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

6
การรวบรวมขยะทำงานในภาษาที่เรียบเรียงอย่างไร
หลังจากการเรียกดูคำตอบหลายกองมากเกินก็เป็นที่ชัดเจนว่าบางภาษาเรียบเรียงโดยกำเนิดมีการเก็บขยะ แต่มันก็ไม่ชัดเจนสำหรับฉันว่ามันจะทำงานอย่างไร ฉันเข้าใจว่าการรวบรวมขยะสามารถทำงานกับภาษาที่ตีความได้อย่างไร ตัวรวบรวมขยะจะทำงานพร้อมกับล่ามและลบวัตถุที่ไม่ได้ใช้และไม่สามารถเข้าถึงได้ออกจากหน่วยความจำของโปรแกรม พวกเขาทั้งสองทำงานร่วมกัน สิ่งนี้จะทำงานกับภาษาที่คอมไพล์ได้อย่างไร? ความเข้าใจของฉันคือเมื่อคอมไพเลอร์ได้รวบรวมซอร์สโค้ดไปยังรหัสเป้าหมาย - โดยเฉพาะรหัสเครื่องดั้งเดิม - ก็เสร็จแล้ว งานเสร็จสิ้นแล้ว ดังนั้นโปรแกรมที่คอมไพล์แล้วจะเก็บขยะได้อย่างไร? คอมไพเลอร์ทำงานร่วมกับ CPU ในบางวิธีในขณะที่โปรแกรมทำงานเพื่อลบวัตถุ "ขยะ" หรือไม่ หรือคอมไพเลอร์มีตัวรวบรวมขยะน้อยที่สุดในการปฏิบัติการของโปรแกรมที่คอมไพล์แล้วหรือไม่ ฉันเชื่อว่าคำสั่งหลังของฉันจะมีความถูกต้องมากกว่าเดิมเนื่องจากข้อความที่ตัดตอนมาจากคำตอบนี้ใน Stack Overflow : ภาษาโปรแกรมหนึ่งนั้นคือไอเฟล คอมไพเลอร์ไอเฟลส่วนใหญ่สร้างรหัส C สำหรับเหตุผลในการพกพา รหัส C นี้ใช้เพื่อสร้างรหัสเครื่องโดยคอมไพเลอร์ C มาตรฐาน Eiffel implementations ให้ GC (และบางครั้งก็แม่นยำ GC) สำหรับโค้ดที่คอมไพล์นี้และไม่จำเป็นสำหรับ VM โดยเฉพาะอย่างยิ่ง VisualEiffel คอมไพเลอร์สร้างรหัสเครื่อง x86 พื้นเมืองโดยตรงกับการสนับสนุน คำสั่งสุดท้ายดูเหมือนจะบ่งบอกว่าคอมไพเลอร์มีบางโปรแกรมในปฏิบัติการสุดท้ายซึ่งทำหน้าที่เป็นตัวเก็บรวบรวมขยะในขณะที่โปรแกรมกำลังทำงาน หน้าบนเว็บไซต์D ภาษาเกี่ยวกับการรวบรวมขยะ - ซึ่งถูกรวบรวมไว้อย่างเป็นธรรมชาติและมีที่เก็บขยะทางเลือก …

11
ทำไมซอฟต์แวร์ OS จึงมีความเฉพาะ?
ฉันพยายามหารายละเอียดทางเทคนิคว่าทำไมซอฟต์แวร์ที่ผลิตโดยใช้ภาษาการเขียนโปรแกรมสำหรับระบบปฏิบัติการบางระบบสามารถใช้งานได้กับพวกเขาเท่านั้น ฉันเข้าใจว่าไบนารีนั้นมีความเฉพาะสำหรับโปรเซสเซอร์บางตัวเนื่องจากภาษาเครื่องเฉพาะของโปรเซสเซอร์ที่พวกเขาเข้าใจและชุดคำสั่งต่างกันระหว่างโปรเซสเซอร์ที่ต่างกัน แต่ความจำเพาะของระบบปฏิบัติการมาจากไหน? ฉันเคยคิดว่ามันเป็น API ที่จัดทำโดยระบบปฏิบัติการ แต่จากนั้นฉันเห็นแผนภาพนี้ในหนังสือ: ระบบปฏิบัติการ - ภายในและหลักการออกแบบ 7 ed - W. Stallings (Pearson, 2012) อย่างที่คุณเห็น APIs ไม่ได้ระบุว่าเป็นส่วนหนึ่งของระบบปฏิบัติการ ตัวอย่างเช่นถ้าฉันสร้างโปรแกรมอย่างง่ายใน C โดยใช้รหัสต่อไปนี้: #include<stdio.h> main() { printf("Hello World"); } คอมไพเลอร์ทำอะไรที่เฉพาะกับ OS เมื่อทำการคอมไพล์หรือไม่

5
Python ตีความหรือเรียบเรียงหรือไม่?
นี่เป็นเพียงความสงสัยในขณะที่ฉันอ่านเกี่ยวกับภาษาที่แปลและเรียบเรียง Rubyไม่ต้องสงสัยเลยว่าเป็นภาษาที่ตีความเนื่องจากซอร์สโค้ดถูกประมวลผลโดยล่าม ณ จุดดำเนินการ ในทางตรงกันข้ามCเป็นภาษาที่รวบรวมเป็นหนึ่งจะต้องรวบรวมซอร์สโค้ดแรกตามเครื่องแล้วดำเนินการ ผลลัพธ์นี้เป็นการดำเนินการที่รวดเร็วยิ่งขึ้น ตอนนี้มาที่Python : รหัสหลาม ( somefile.py ) เมื่อนำเข้าสร้างไฟล์ ( somefile.pyc ) ในไดเรกทอรีเดียวกัน ให้เราบอกว่าการนำเข้าจะทำในเปลือกหลามหรือโมดูล django หลังจากนำเข้าฉันเปลี่ยนรหัสเล็กน้อยและดำเนินการฟังก์ชั่นที่นำเข้าอีกครั้งเพื่อค้นหาว่ามันยังคงใช้รหัสเดิมอยู่ สิ่งนี้ชี้ให้เห็นว่าไฟล์ * .pyc เป็นไฟล์ไพ ธ อนที่คอมไพล์เหมือนกับไฟล์ที่สร้างขึ้นหลังจากการคอมไพล์ไฟล์ C ถึงแม้ว่าฉันจะไม่สามารถเรียกใช้ไฟล์ * .pyc ได้โดยตรง เมื่อดำเนินการไฟล์ python (somefile.py) โดยตรง (./somefile.py หรือ python somefile.py) จะไม่มีการสร้างไฟล์. pyc และรหัสจะถูกดำเนินการตามที่ระบุถึงพฤติกรรมที่ตีความ สิ่งเหล่านี้แนะนำให้รวบรวมรหัสไพ ธ อนทุกครั้งที่มีการนำเข้าในกระบวนการใหม่เพื่อสร้าง. pyc ในขณะที่มันถูกตีความเมื่อดำเนินการโดยตรง ดังนั้นฉันควรใช้ภาษาประเภทใด ตีความหรือรวบรวม? และประสิทธิภาพของมันเปรียบเทียบกับภาษาที่แปลและเรียบเรียงได้อย่างไร …

5
ทำไมมีคอมไพเลอร์ C น้อยมาก?
C เป็นหนึ่งในภาษาที่ใช้กันอย่างแพร่หลายมากที่สุดในโลก มันคิดเป็นสัดส่วนใหญ่ของรหัสที่มีอยู่และยังคงใช้สำหรับรหัสใหม่จำนวนมหาศาล เป็นที่ชื่นชอบของผู้ใช้มันบอกอย่างกว้างขวางว่าความสามารถในการเรียกใช้ C คือคำจำกัดความที่ไม่เป็นทางการของแพลตฟอร์มและได้รับคำชมจากแฟน ๆ ว่าเป็นภาษา "เล็ก" ที่มีคุณสมบัติค่อนข้างสะอาด แล้วคอมไพเลอร์ทั้งหมดอยู่ที่ไหน? บนเดสก์ท็อปมีสอง (แนบเนียน) สอง : GCC และเสียงดังกราว ลองคิดดูสักสองสามวินาทีคุณอาจจำได้ว่า Intel มีอยู่เช่นกัน มีคนอื่นไม่กี่คนที่คลุมเครือเกินกว่าที่คนทั่วไปจะตั้งชื่อและแทบจะไม่รบกวนการสนับสนุนภาษารุ่นล่าสุด (หรือบ่อยครั้งที่แม้แต่กลุ่มย่อยภาษาที่กำหนดไว้อย่างชัดเจนเพียงแค่ "ชุดย่อย") ครึ่งหนึ่งของสมาชิกในรายการนี้เป็นเชิงอรรถเชิงประวัติศาสตร์ ที่เหลือส่วนใหญ่มีความเชี่ยวชาญเป็นพิเศษและยังไม่ได้ใช้ภาษาเต็มรูปแบบ ที่จริงมีน้อยมากที่ดูเหมือนจะเป็นโอเพ่นซอร์ส Scheme และ Forth - ภาษาขนาดเล็กอื่น ๆ ที่แฟน ๆ ชื่นชอบ - อาจมีคอมไพเลอร์มากกว่าผู้ใช้จริง แม้บางอย่างเช่นSMLมี "ร้ายแรง" การใช้งานให้เลือกระหว่างกว่าองศาเซลเซียสในขณะที่การประกาศของคอมไพเลอร์ใหม่ (ยังไม่เสร็จ) C เล็งไปที่การตรวจสอบจริงเห็นตอบสนองเชิงลบบางสวยและการใช้งานที่มีประสบการณ์ต่อสู้เพื่อให้ได้ร่วมสมทบมากพอที่จะได้จับได้ถึง C99 ทำไม? การติดตั้ง C ยากไหม ไม่ใช่ C …

10
ทำไมคอมไพเลอร์ตัวแรกเขียนหน้าล่ามตัวแรก
คอมไพเลอร์ตัวแรกเขียนโดย Grace Hopper ในปี 1952 ในขณะที่ล่าม Lisp ถูกเขียนในปี 1958 โดย Steve Russell นักศึกษา John McCarthy การเขียนคอมไพเลอร์ดูเหมือนว่าเป็นปัญหาที่ยากกว่าล่าม ถ้าเป็นเช่นนั้นทำไมคอมไพเลอร์ตัวแรกเขียนหกปีก่อนล่ามคนแรก?

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

10
การใช้คอมไพเลอร์ C ++ เป็นเพียงการปฏิบัติที่เกินความจำเป็นหรือไม่
ดังนั้นฉันจึงทำงานเกี่ยวกับการออกแบบซอฟต์แวร์โดยใช้ C สำหรับโปรเซสเซอร์บางตัว ชุดเครื่องมือประกอบด้วยความสามารถในการคอมไพล์ C และ C ++ สำหรับสิ่งที่ฉันทำไม่มีการจัดสรรหน่วยความจำแบบไดนามิกในสภาพแวดล้อมนี้และโปรแกรมโดยรวมค่อนข้างง่าย ไม่ต้องพูดถึงว่าอุปกรณ์มีพลังประมวลผลหรือทรัพยากรเกือบไม่ ไม่จำเป็นต้องใช้ C ++ ใด ๆ เลย ที่ถูกกล่าวว่ามีไม่กี่สถานที่ที่ฉันทำฟังก์ชั่นมากไป (คุณสมบัติของ C ++) ฉันต้องการส่งข้อมูลประเภทต่าง ๆ และไม่รู้สึกอยากใช้printfการจัดรูปแบบสไตล์กับ%sอาร์กิวเมนต์ (หรืออะไรก็ตาม) บางประเภท ฉันเคยเห็นบางคนที่ไม่สามารถเข้าถึงคอมไพเลอร์ C ++ ที่ทำprintfสิ่งนี้ได้ แต่ในกรณีของฉันรองรับ C ++ พร้อมใช้งาน ตอนนี้ฉันแน่ใจว่าฉันอาจได้รับคำถามว่าทำไมฉันต้องโอเวอร์โหลดฟังก์ชันเพื่อเริ่มต้นด้วย ดังนั้นฉันจะพยายามตอบตอนนี้ ฉันต้องส่งข้อมูลประเภทต่าง ๆ ออกจากพอร์ตอนุกรมดังนั้นฉันจึงมีข้อมูลเกินจำนวนเล็กน้อยที่ส่งประเภทข้อมูลต่อไปนี้: unsigned char* const char* unsigned char const char ฉันแค่ไม่อยากมีวิธีการหนึ่งที่จัดการกับสิ่งเหล่านี้ทั้งหมด เมื่อฉันเรียกใช้ฟังก์ชั่นที่ฉันต้องการให้มันส่งออกพอร์ตอนุกรมฉันไม่มีทรัพยากรมากมายดังนั้นฉันจึงไม่ต้องการที่จะทำอะไรเลยนอกจากการส่งสัญญาณของฉัน มีคนอื่นเห็นโปรแกรมของฉันและถามฉันว่า "ทำไมคุณถึงใช้ไฟล์ …

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

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

9
คอมไพเลอร์ของ Intel ดีกว่าของ Microsoft หรือเปล่า [ปิด]
หลายปีก่อนฉันรู้สึกประหลาดใจเมื่อค้นพบว่า Intel ขายคอมไพเลอร์ที่เข้ากันได้กับ Visual Studio ฉันพยายามเป็นพิเศษสำหรับ C / C ++ รวมถึงเครื่องมือวินิจฉัยที่ยอดเยี่ยม แต่รหัสไม่ได้เป็นเพียงการคำนวณอย่างเข้มข้นที่จะสังเกตเห็นความแตกต่าง ความประทับใจเพียงอย่างเดียวคือ: Intel ทำเพื่อฉันจริง ๆ เพียงแค่ตอนนี้ว้าวเครื่องมือที่น่าทึ่งที่มีความละเอียดระดับนาโนวินาทีไม่น่าเชื่อ แต่การพิจารณาคดีสิ้นสุดลงและทีมไม่เคยพิจารณาการซื้ออย่างจริงจัง จากประสบการณ์ของคุณหากค่าลิขสิทธิ์ไม่สำคัญผู้ขายใดจะเป็นผู้ชนะ มันไม่ใช่คำถามที่กว้างหรือคลุมเครือเพื่อจุดประกายสงครามศักดิ์สิทธิ์ คำถามประเภทนี้เป็นเครื่องมือสองอย่างที่มองเห็นได้ชัดเจน ไม่มีใครชอบเมื่อเครื่องมือมีความลึกลับหรือความประหลาดใจ และตัวเลือกระหว่างดีที่สุดและดีที่สุดมักเป็นความเจ็บปวด ฉันยังเข้าใจหญ้าสีเขียวอยู่เสมออาร์กิวเมนต์ ฉันต้องการฟังเรื่องราวทั้งหมด "สิ่งที่ควรทำ" จะเกิดอะไรขึ้นถ้าหาก Intel เพิ่มประสิทธิภาพให้กับชิปในแต่ละเดือนและไม่ใช่ว่าเป้าหมายฮาร์ดแวร์ทุกอันจะทำงานได้ดีเท่ากับ Microsoft ที่คอมไพล์แล้ว? ถ้าฮาร์ดแวร์ของ AMD เป็นเป้าหมายและทุกอย่างจะช้าลงอย่างไม่มีเหตุผล หรือในทางกลับกันถ้าฮาร์ดแวร์ของ Intel มีโอกาสที่ไม่สามารถคาดเดาได้มากมายนักเขียนคอมไพเลอร์ของ Microsoft นั้นช้าเกินกว่าที่จะยอมรับและไม่เคยนำไปใช้ในคอมไพเลอร์ จะเกิดอะไรขึ้นถ้าทั้งคู่เหมือนกันจริง ๆ แล้วมี codebase เพียงอันเดียวที่ห่อไว้ในกล่องสองกล่องที่แตกต่างกันและอนุญาตให้ผู้ขายทั้งสองรายจากร้านค้าของบุคคลที่สาม และอื่น ๆ แต่บางคนก็รู้คำตอบ
56 compiler 

5
“ ไม่มีบริบท” หมายถึงอะไรในคำว่า "ไวยากรณ์ที่ไม่มีบริบท"
ด้วยจำนวนเนื้อหาที่พยายามอธิบายว่าไวยากรณ์ที่ปราศจากบริบท (CFG) คืออะไรฉันพบว่ามันน่าประหลาดใจที่น้อยมาก (ในตัวอย่างของฉันน้อยกว่า 1 ใน 20) ให้คำอธิบายว่าทำไมไวยากรณ์ดังกล่าวเรียกว่า "บริบท - ฟรี". และในใจของฉันไม่มีใครประสบความสำเร็จในการทำเช่นนั้น คำถามของฉันคือทำไมไวยากรณ์ที่ไม่มีบริบทเรียกว่าไม่มีบริบท "บริบท" คืออะไร? ฉันมีสัญชาตญาณว่าบริบทอาจเป็นภาษาอื่น ๆ ที่อยู่รอบ ๆ โครงสร้างที่วิเคราะห์อยู่ในปัจจุบัน แต่ดูเหมือนจะไม่เป็นเช่นนั้น ใครช่วยอธิบายได้อย่างแม่นยำ?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.