Shivyc هو برنامج مترجم هواية 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. لاستخدام هذا ، قم بتشغيل:
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 Adlextaily مع أي تغييرات تم إجراؤها في دليل Shivyc المحلي.
لدى Shivyc Today معالجًا مسبقًا محدودًا للغاية يقوم بتوزيع التعليقات ويوسع توجيهات #include . يتم تنفيذ هذه الميزات بين lexer.py و preproc.py .
يتم تنفيذ Shivyc Lexer في المقام الأول في lexer.py . بالإضافة إلى ذلك ، يحتوي tokens.py على تعريفات لفئات الرمز المميز المستخدمة في Lexer و token_kinds.py تحتوي على مثيلات من الرموز الرئيسية والرموز المعترف بها.
يستخدم محلل Shivyc تقنيات النسب العودية لجميع التحليل. يتم تنفيذه tree/expr_nodes.py parser/*.py tree/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 موضع ترحيب للغاية. مكان جيد للبدء هو صفحة القضايا. جميع القضايا المسمى "ميزة" هي مهام TODO. القضايا المسمى "الخلل" هي اختلالات فردية في Shivyc. إذا كان لديك أي أسئلة ، فلا تتردد في طرح تعليقات القضية ذات الصلة أو إنشاء مشكلة جديدة تحمل اسم "سؤال". بالطبع ، يرجى إضافة اختبار (اختبارات) لجميع الوظائف الجديدة.
شكرا جزيلا للمساهمين الحاليين والسابقين: