ฉันตั้งความท้าทายให้ตัวเอง: เขียนคอมไพเลอร์ C ที่โฮสต์เองภายใน 10 ชั่วโมง นี่คือผลลัพธ์ พร้อมการล้างข้อมูลจำนวนมาก (ตรวจสอบ "การเผยแพร่" สำหรับเวอร์ชัน 10 ชั่วโมง)
การนำไปปฏิบัติ:
ภาษา:
if
, while
, do``while
, return
=
, ?:
(ไตรภาค), ||
, &&
, ==
, !=
, <
, >=
, +
, -
, *
, ++
, --
(หลังการดำเนินการ), !
, -
(เอก), []
, ()
true
และ false
ตัวอักษรสตริงที่มีการต่อข้อมูลอัตโนมัติ ปรัชญาทั่วไปคือ: รวมเฉพาะคุณลักษณะหากจะลดขนาดโค้ดทั้งหมด สิ่งนี้นำไปสู่ความสุดขั้วในสาขา insane
git clone http://github.com/Fedjmike/mini-c
cd mini-c
make selftest
สิ่งนี้จะสร้าง cc
ก่อนโดยการคอมไพล์ mini-c ด้วย GCC จากนั้นก็สร้าง ccself
โดยการคอมไพล์ mini-c ด้วย cc
ในที่สุดก็สร้าง test/triangular
โดยใช้ ccself
และตรวจสอบผลลัพธ์ คุณควรได้รับสิ่งนี้:
$ make selftest
gcc -std=c11 -Werror -Wall cc.c -o cc
cc cc.c
gcc -m32 a.s -o ccself
ccself tests/triangular.c
gcc -m32 a.s -o triangular; triangular 5; [ $? -eq 15 ]
หากคุณใช้ Windows คุณจะต้องชำระเงินที่สาขา windows
บน Linux 64 บิต คุณอาจต้อง sudo apt-get install gcc-multilib
เพื่อให้สามารถคอมไพล์และรันโค้ด 32 บิตได้
คอมไพเลอร์ C ด้วยกล้องจุลทรรศน์อีกตัวคือ c4 โดย rswier
เขาใช้ C มากขึ้น แต่ฉันว่าของฉันง่ายกว่า :) นอกจากนี้ c4 ยังสร้างโค้ดสำหรับ VM ของตัวเอง ในขณะที่ของฉันมีปัญหาอย่างมากในการทำงานกับแอสเซมบลี x86 และ cdecl
ฉันเขียนคอมไพเลอร์ C ขั้นสูงอีกตัวหนึ่ง ตรวจสอบออก มันเป็นการโฮสต์ด้วยตนเองเช่นกัน แต่มีชุดฟีเจอร์ที่สมบูรณ์กว่ามากและแม้แต่การทดลองเพิ่มเติมบางอย่างเช่นแลมบ์ดา
ลิขสิทธิ์ (c) 2015 Sam Nipps
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.