هذا هو الأمر cpphs الذي يمكن تشغيله في مزود الاستضافة المجانية OnWorks باستخدام إحدى محطات العمل المجانية المتعددة عبر الإنترنت مثل Ubuntu Online أو Fedora Online أو محاكي Windows عبر الإنترنت أو محاكي MAC OS عبر الإنترنت
برنامج:
اسم
cpphs - معالج أولي مشابه لـ cpp-a-like لهاسكل
موجز
cphs [اسم الملف|OPTION] ...
الوصف
cphs هو إعادة تنفيذ محررة حزب الشعب الكمبودي (1) المعالج المسبق C ، في و
هاسكل.
لماذا إعادة تطبيق CPP؟ عن حق أو خطأ ، يتم استخدام المعالج الأولي C على نطاق واسع في Haskell
مصدر الرمز. يتيح التجميع الشرطي لمجمعين مختلفين ومختلفين
إصدارات من نفس المترجم وأنظمة تشغيل مختلفة. كما أنها تستخدم في بعض الأحيان
للغة الماكرو الخاصة بها ، والتي يمكنها تمكين أشكال معينة من التفاصيل الخاصة بالمنصة-
الملء ، مثل إنشاء نموذج معياري ممل لتعريفات المثيل والأغذية المالية الأجنبية
الإعلانات. ومع ذلك ، هناك مشكلتان في cpp ، بصرف النظر عن الجمالية الواضحة
منها:
بالنسبة لبعض أنظمة Haskell ، لا سيما Hugs على Windows ، لا يتوفر cpp حقيقي بواسطة
افتراضي.
حتى بالنسبة لأنظمة Haskell الأخرى ، فإن cpp الشائع الذي توفره سلسلة gcc 3.x
يتغير بمهارة بطرق لا تتوافق مع بناء جملة هاسكل. هنالك
كانت دائمًا مشاكل ، على سبيل المثال ، فجوات السلسلة والأحرف الأولية في
معرفات. هذه المشاكل ستزداد سوءًا.
لذلك ، بدا أنه من الصواب محاولة توفير بديل لـ cpp ، وكلاهما أكثر توافقًا مع
Haskell ، وكتبت بنفسها بلغة Haskell بحيث يمكن توزيعها مع المترجمين.
cphs إلى حد كبير مكتمل الميزات ومتوافق مع -تقليدي أسلوب CPP.
لها وضعان:
الترجمة الشرطية فقط (--نوماكرو),
والتوسع الكلي الكامل (افتراضي).
In --نوماكرو الوضع، cphs يؤدي فقط إجراءات الترجمة الشرطية ، أي تتضمن #'S،
#إذا، و #ifdefتتم معالجتها وفقًا لتعريفات استبدال النص (كلا الأمرين-
خط داخلي وداخلي) ، ولكن لا يتم تنفيذ أي توسعة ماكرو محددة المعلمات. كليا
وضع التوافق (الافتراضي) والاستبدالات النصية والتوسعات الكلية هي أيضًا
تمت معالجته في الجزء المتبقي من نص غير cpp.
ميزات العمل:
#ifdef تجميع شرطي بسيط
#إذا اللغة المنطقية الكاملة لـ المعرفة () ، && ، || ، == ، إلخ.
#elif الشرطية بالسلاسل
# تعريف
تعريفات مضمنة (استبدال النص ووحدات الماكرو)
# صندوق إبطال التعاريف في الخط
تتضمن #
تضمين الملف
#خط توجيهات رقم السطر
\n استمرار الخط ضمن جميع التوجيهات #
/ ** / تسلسل رمزي ضمن تعريف ماكرو
## تسلسل رمزي على غرار ANSI
# سلسلة الرموز المميزة بنمط ANSI
__ملف__
استبدال نص خاص لرسائل خطأ DIY
__خط__
استبدال نص خاص لرسائل خطأ DIY
__تاريخ__
استبدال نص خاص
__الوقت__
استبدال نص خاص
توسيع الماكرو تكراري. لا تؤدي إعادة تعريف اسم الماكرو إلى إنشاء تحذير.
يمكن تعريف وحدات الماكرو في سطر الأوامر باستخدام -D تمامًا مثل الاستبدالات النصية. دقيق
يُسمح للأسماء أن تكون معرّفات Haskell ، على سبيل المثال باستخدام العلامة الأولية `و backtick ´
الأحرف ، وهي أخف قليلاً من C ، لكنها لا تزال غير مشتملة على عامل التشغيل
حرف.
يتم الاحتفاظ بترقيم الأسطر في المخرجات بحيث يمكن لأي معالج لاحق تقديمها
رسائل خطأ ذات مغزى. عندما يكون الملف تتضمن #'د، cphs إدراج #خط توجيهات لـ
نفس السبب. يجب أن يكون الترقيم صحيحًا حتى في وجود استمرارية الخط.
إذا كنت لا تريد #خط التوجيهات في الإخراج النهائي ، استخدم --لا خط الخيار.
أي أخطاء في بناء الجملة في تعليمات cpp تعطي رسالة إلى stderr وتوقف البرنامج.
ينتج عن الفشل في العثور على ملف # include'd تحذيرًا لـ stderr ، لكن المعالجة تستمر.
يمكنك إعطاء أي عدد من أسماء الملفات في سطر الأوامر. النتائج متسلسلة
الإخراج القياسي.
-DSYM تحديد بديل نصي (القيمة الافتراضية هي 1)
-دم =فال
تحديد بديل نصي بقيمة محددة
-Iمسار إضافة دليل إلى مسار البحث عن # include's
-Oملف تحديد ملف للإخراج (الافتراضي هو stdout)
--نوماكرو
فقط معالجة # ifdef's و # include's ،
لا تقم بتوسيع وحدات الماكرو
--لا خط
إزالة فضلات # سطر من الإخراج
--قطاع
تحويل التعليقات على نمط C إلى مسافة بيضاء ، حتى في الخارج
توجيهات CPP
- حشوات
يتعرف على عامل السلسلة ANSI # ، و ## لـ
تسلسل رمزي ، داخل وحدات الماكرو
--نص تعامل مع الإدخال كنص عادي ، وليس كود هاسكل
--نسق
الحفاظ على الأسطر الجديدة داخل التوسعات الكلية
- غير مضاء
إزالة التعليقات ذات الأسلوب المتعلم
--الإصدار
تقرير رقم إصدار cpphs والتوقف
لا توجد بدائل نصية محددة بشكل افتراضي. (عادةً ما يكون لـ cpp العادي تعريفات
للجهاز ، ونظام التشغيل ، وما إلى ذلك ، يمكن إضافتها بسهولة إلى شفرة المصدر cpphs إذا كنت ترغب في ذلك.)
يتم البحث في مسار البحث بترتيب -I الخيارات ، باستثناء أن دليل
يتم البحث دائمًا عن ملف الاستدعاء ، ثم الدليل الحالي ، أولاً. مرة أخرى ، لا يوجد
مسار البحث الافتراضي (ومرة أخرى ، يمكن تغيير ذلك بسهولة).
اختلافات من عند CPP
بشكل عام ، يعتمد cpphs على -تقليدي السلوك ، وليس ANSI C ، ويمتلك الامتداد
بعد الاختلافات الرئيسية من معيار CPP.
العلاجات العامة
• # الذي يقدم أي توجيه cpp يجب أن يكون في العمود الأول من السطر (حيث
يسمح ANSI بمسافة بيضاء قبل ملف # ).
يولد #خط n "اسم الملف"، وليس # n "اسم الملف"البديل.
تتم إزالة تعليقات C فقط من داخل توجيهات cpp. لا يتم تجريدهم من الآخرين
نص. ضع في اعتبارك على سبيل المثال أنه في Haskell ، كل ما يلي هو عامل تشغيل صالح
حرف او رمز: /* */ * / * ومع ذلك ، يمكنك تشغيل إزالة التعليق C باستخدام امتداد --قطاع الخيار.
الماكرو لغة
يقبل / ** / للصق الرمز في تعريف الماكرو. لكن، /* */ (مع أي نص
بين تعليق الفتح / الإغلاق) يُدرج مسافة بيضاء.
إن ANSI ## مشغل لصق الرموز متاح مع - حشوات علَم. هذا لتجنب
إساءة تفسير أي مشغل هاسكل صالح يحمل نفس الاسم.
لاستبدال معلمة ماكرو رسمية بالمعامل الفعلي ، حتى داخل سلسلة (مزدوجة أو مفردة
مقتبس). هذا - سلوك تقليدي ، غير مدعوم في ANSI.
يتعرف على # عامل السلسلة في تعريف الماكرو فقط إذا كنت تستخدم الامتداد - حشوات
خيار. (إنها إضافة ANSI ، مطلوبة فقط لأن التشديد المقتبس (أعلاه) هو
يحظره ANSI.)
يحافظ على المسافة البيضاء ضمن تعريف بديل نصي تمامًا (أسطر جديدة من modulo) ،
ولكن يتم التخلص من المسافة الأمامية والخلفية.
يحافظ على المسافة البيضاء ضمن تعريف ماكرو (ويتبعها) تمامًا (modulo
newlines) ، ولكن يتم التخلص من المسافة البادئة.
يحتفظ بالمسافات البيضاء داخل وسيطات استدعاء الماكرو تمامًا (بما في ذلك الأسطر الجديدة) ، لكن بادئة
ويتم التخلص من المساحة الزائدة.
مع --نسق الخيار ، استمرار الخط في استبدال نصي أو تعريف ماكرو
يتم الاحتفاظ بها كفواصل أسطر في استدعاء الماكرو. (مفيد للتعليمات البرمجية الحساسة للتخطيط بتنسيق
هاسكل.)
استخدم cpphs عبر الإنترنت باستخدام خدمات onworks.net