AMACC เป็นคอมไพเลอร์สถาปัตยกรรมแขน 32 บิตที่สร้างขึ้นตั้งแต่เริ่มต้น มันทำหน้าที่เป็นรุ่น C ที่ถูกถอดออกซึ่งออกแบบมาเป็นเครื่องมือสอนสำหรับการเรียนรู้เกี่ยวกับคอมไพเลอร์ตัวเชื่อมโยงและรถตัก
มีสองโหมดการดำเนินการ AMACC:
เป็นมูลค่าการกล่าวขวัญว่า AMACC ได้รับการออกแบบมาเพื่อรวบรวมชุดย่อยของ C ที่จำเป็นในการโฮสต์ด้วยตนเองด้วยโหมดการดำเนินการข้างต้น ตัวอย่างเช่นรองรับตัวแปรทั่วโลกโดยเฉพาะอาร์เรย์ทั่วโลก
แผนผังนามธรรมแบบนามธรรมแบบสแต็กแบบง่าย (AST) ถูกสร้างขึ้นผ่านฟังก์ชั่นการแยกวิเคราะห์ stmt() และ expr() ร่วมมือกันทั้งสองอย่างที่ได้รับจากฟังก์ชั่นการสร้างโทเค็น ฟังก์ชั่น expr() ดำเนินการเพิ่มประสิทธิภาพอย่างต่อเนื่องตามตัวอักษร AST ถูกเปลี่ยนเป็น VM Intermediate Assentation (IR) ที่ใช้สแต็กโดยใช้ฟังก์ชัน gen() IR สามารถตรวจสอบได้ผ่านตัวเลือกบรรทัดคำสั่ง ในที่สุดฟังก์ชั่น codegen() จะสร้างคำสั่ง ARM32 จาก IR ซึ่งสามารถดำเนินการผ่านการสร้างการดำเนินการ jit() หรือ elf32()
AMACC ผสมผสานการแยกตัวแบบเรียกซ้ำแบบคลาสสิกและการแยกวิเคราะห์ความสำคัญของผู้ประกอบการ ตัวแยกวิเคราะห์ความสำคัญของผู้ประกอบการพิสูจน์ให้เห็นว่าเร็วกว่าตัวแยกวิเคราะห์เชื้อสายแบบเรียกซ้ำ (RDP) อย่างมากสำหรับการแสดงออกเมื่อมีการกำหนดความสำคัญของผู้ประกอบการโดยใช้การผลิตไวยากรณ์ที่จะกลายเป็นวิธีการ
AMACC มีความสามารถในการรวบรวมไฟล์ต้นฉบับ C ที่เขียนในไวยากรณ์ต่อไปนี้:
int i = [expr]int foo[2][2] = { { 1, 0 }, { 0, 1 } };การสนับสนุนสถาปัตยกรรมเป้าหมาย ARMV7HF กับ Linux ABI และได้รับการตรวจสอบใน Raspberry Pi 2/3/4 ด้วย GNU/Linux
ตัวสร้างรหัสใน AMACC ขึ้นอยู่กับพฤติกรรม GNU/Linux หลายอย่างและจำเป็นต้องติดตั้ง ARM/Linux ในสภาพแวดล้อมการสร้างของคุณ
ติดตั้ง GNU Toolchain สำหรับสถาปัตยกรรม A-Profile
arm-linux-none-gnueabihf (เป้าหมาย AARCH32 ด้วย Hard Float)ติดตั้ง QEMU สำหรับการจำลองผู้ใช้ ARM
sudo apt-get install qemu-user เรียก make check แล้วคุณควรเห็นสิ่งนี้:
[ C to IR translation ] Passed
[ JIT compilation + execution ] Passed
[ ELF generation ] Passed
[ nested/self compilation ] Passed
[ Compatibility with GCC/Arm ] ........................................
----------------------------------------------------------------------
Ran 52 tests in 8.842s
OK
ตรวจสอบข้อความที่สร้างขึ้นโดย make help ในการเรียนรู้เพิ่มเติม
AMACC สามารถสร้างรหัสเครื่องได้อย่างรวดเร็วและให้ 70% ของประสิทธิภาพของ gcc -O0
สภาพแวดล้อมการทดสอบ:
ไฟล์แหล่งที่มาอินพุต: amacc.c
| ไดรเวอร์คอมไพเลอร์ | ขนาดไบนารี (KIB) | รวบรวมเวลา |
|---|---|---|
GCC ด้วย -O0 -ldl (Compile+Link) | 56 | 0.5683 |
GCC ด้วย -O0 -c (คอมไพล์เท่านั้น) | 56 | 0.4884 |
| ความน่าเชื่อถือ | 100 | 0.0217 |
ตรวจสอบการเป็นตัวแทนระดับกลาง (IR) สำหรับการรวบรวม AMACC
AMACC ขึ้นอยู่กับโครงสร้างพื้นฐานของ C4