لقد وضعت لنفسي تحديًا: كتابة مترجم 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 مع دول مجلس التعاون الخليجي. ثم يقوم بإنشاء 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، لكنني أقول إن لغة C أبسط :). أيضًا، يقوم c4 بإنشاء كود لجهاز افتراضي خاص به، بينما يواجه جهازي صعوبة كبيرة في العمل مع تجميع x86 وcdecl.
لقد كتبت مترجم C آخر أكثر تقدمًا. تحقق من ذلك. إنها أيضًا ذاتية الاستضافة، ولكن مع مجموعة ميزات أكثر اكتمالاً، وحتى بعض الإضافات التجريبية مثل lambdas.
حقوق الطبع والنشر (ج) 2015 سام نيبس
يُمنح الإذن مجانًا لأي شخص يحصل على نسخة من هذا البرنامج وملفات الوثائق المرتبطة به ("البرنامج")، للتعامل في البرنامج دون قيود، بما في ذلك، على سبيل المثال لا الحصر، حقوق الاستخدام والنسخ والتعديل والدمج. ونشر و/أو توزيع وترخيص من الباطن و/أو بيع نسخ من البرنامج، والسماح للأشخاص الذين تم توفير البرنامج لهم بالقيام بذلك، وفقًا للشروط التالية:
يجب تضمين إشعار حقوق الطبع والنشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الكبيرة من البرنامج.
يتم توفير البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك، على سبيل المثال لا الحصر، ضمانات القابلية للتسويق والملاءمة لغرض معين وعدم الانتهاك. لا يتحمل المؤلفون أو أصحاب حقوق الطبع والنشر بأي حال من الأحوال المسؤولية عن أي مطالبة أو أضرار أو مسؤولية أخرى، سواء في إجراء العقد أو الضرر أو غير ذلك، الناشئة عن أو خارج أو فيما يتعلق بالبرنامج أو الاستخدام أو المعاملات الأخرى في برمجة.