Shivyc เป็นคอมไพเลอร์ C Hobby C ที่เขียนใน Python 3 ที่รองรับชุดย่อยของมาตรฐาน C11 และสร้างไบนารีที่มีประสิทธิภาพอย่างสมเหตุสมผลรวมถึงการเพิ่มประสิทธิภาพบางอย่าง Shivyc ยังสร้างข้อความแสดงข้อผิดพลาดเวลารวบรวมเวลาที่เป็นประโยชน์
การใช้งาน Trie นี้เป็นตัวอย่างของสิ่งที่ Shivyc สามารถรวบรวมได้ในวันนี้ สำหรับรายการคุณสมบัติที่ครอบคลุมมากขึ้นให้ดูที่ไดเรกทอรีการทดสอบคุณสมบัติ
Shivyc ต้องการเฉพาะ Python 3.6 หรือใหม่กว่าเพื่อรวบรวมรหัส C การประกอบและการเชื่อมโยงทำได้โดยใช้ GNU binutils และ Glibc ซึ่งคุณเกือบจะติดตั้งแล้ว
ในการติดตั้ง Shivyc:
pip3 install shivyc
ในการสร้างรวบรวมและเรียกใช้โปรแกรมตัวอย่าง:
$ vim hello . c
$ cat hello . c
#include <stdio.h>
int main () {
printf ( "hello, world!n" );
}
$ shivyc hello . c
$ ./ out
hello , world !เพื่อเรียกใช้การทดสอบ:
git clone https://github.com/ShivamSarodia/ShivyC.git
cd ShivyC
python3 -m unittest discover
เพื่อความสะดวกของผู้ที่ไม่ได้ใช้งาน Linux docker/ Directory ให้บริการ DockerFile ที่ตั้งค่าสภาพแวดล้อม X86-64 Linux Ubuntu กับทุกสิ่งที่จำเป็นสำหรับ Shivyc เพื่อใช้สิ่งนี้ Run:
git clone https://github.com/ShivamSarodia/ShivyC.git
cd ShivyC
docker build -t shivyc docker/
docker/shell
สิ่งนี้จะเปิดเปลือกในสภาพแวดล้อมที่ติดตั้ง Shivyc และพร้อมใช้งานด้วย
shivyc any_c_file.c # to compile a file
python3 -m unittest discover # to run tests
Docker Shivyc Consenable จะอัปเดตสดด้วยการเปลี่ยนแปลงใด ๆ ที่เกิดขึ้นในไดเรกทอรี Shivyc ในพื้นที่ของคุณ
Shivyc Today มีตัวประมวลผลล่วงหน้าที่ จำกัด มากซึ่งแยกวิเคราะห์ความคิดเห็นและขยายคำสั่ง #include คุณสมบัติเหล่านี้ถูกนำไปใช้ระหว่าง lexer.py และ preproc.py
Shivyc Lexer ถูกนำมาใช้เป็นหลักใน lexer.py นอกจากนี้ tokens.py ยังมีคำจำกัดความของคลาสโทเค็นที่ใช้ใน Lexer และ token_kinds.py มีอินสแตนซ์ของคำหลักที่ได้รับการยอมรับและโทเค็นสัญลักษณ์
ตัวแยกวิเคราะห์ Shivyc ใช้เทคนิคการสืบเชื้อสายแบบเรียกซ้ำสำหรับการแยกวิเคราะห์ทั้งหมด มันถูกนำไปใช้ใน parser/*.py และสร้างต้นไม้แยกวิเคราะห์ของโหนดที่กำหนดไว้ใน tree/nodes.py และ tree/expr_nodes.py
Shivyc สำรวจต้นไม้ที่แยกวิเคราะห์เพื่อสร้าง IL แบบกำหนดเอง (ภาษากลาง) คำสั่งสำหรับ IL นี้อยู่ใน il_cmds/*.py วัตถุที่ใช้สำหรับการสร้าง IL อยู่ใน il_gen.py แต่รหัสการสร้าง IL ส่วนใหญ่อยู่ในฟังก์ชัน make_code ของแต่ละโหนดต้นไม้ใน tree/*.py
Shivyc ตามลำดับอ่านคำสั่ง IL โดยแปลงแต่ละรายการเป็นรหัสประกอบ Intel-Format x86-64 Shivyc ดำเนินการจัดสรรการลงทะเบียนโดยใช้อัลกอริทึมการลงทะเบียนซ้ำของ George และ Appel (ดูข้อมูลอ้างอิงด้านล่าง) ฟังก์ชั่นการสร้าง ASM ทั่วไปอยู่ใน asm_gen.py แต่รหัสการสร้าง ASM ส่วนใหญ่อยู่ในฟังก์ชัน make_asm ของแต่ละคำสั่ง il ใน il_cmds/*.py
การร้องขอการดึงไปยัง Shivyc ยินดีเป็นอย่างยิ่ง จุดเริ่มต้นที่ดีคือหน้าปัญหา ปัญหาทั้งหมดที่ระบุว่า "คุณสมบัติ" เป็นงานที่ต้องทำ ปัญหาที่ระบุว่า "บั๊ก" เป็นการผิดพลาดของแต่ละบุคคลใน Shivyc หากคุณมีคำถามใด ๆ โปรดอย่าลังเลที่จะถามความคิดเห็นของปัญหาที่เกี่ยวข้องหรือสร้างปัญหาใหม่ที่มีข้อความว่า "คำถาม" แน่นอนโปรดเพิ่มการทดสอบสำหรับฟังก์ชั่นใหม่ทั้งหมด
ขอบคุณมากสำหรับผู้มีส่วนร่วมในปัจจุบันและในอดีตของเรา: