این دستور cpph است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.
برنامه:
نام
cpphs - پیش پردازشگر شبیه cpp-a آزاد شده برای Haskell
خلاصه
cpphs [نام فایل|گزینه] ...
شرح
cpphs اجرای مجدد آزاد شده است cpp (1) پیش پردازنده C، در و برای
هاسکل.
چرا cpp را دوباره پیاده سازی کنیم؟ درست یا نادرست، پیش پردازنده C به طور گسترده در Haskell استفاده می شود
کد منبع این امکان کامپایل شرطی را برای کامپایلرهای مختلف، متفاوت فراهم می کند
نسخه های یک کامپایلر و پلتفرم های مختلف سیستم عامل. گاهی اوقات نیز استفاده می شود
برای زبان کلان خود، که می تواند اشکال خاصی از جزئیات پلتفرم خاص را فعال کند.
پر کردن، مانند تولید خسته کننده دیگ بخار از تعاریف نمونه و FFI
اعلامیه ها با این حال، دو مشکل با cpp وجود دارد، جدای از زیبایی شناسی آشکار
آنهایی که:
برای برخی از سیستمهای Haskell، به ویژه Hugs در ویندوز، یک cpp واقعی در دسترس نیست
به طور پیش فرض
حتی برای سایر سیستمهای Haskell، cpp مشترک ارائه شده توسط سری gcc 3.x
در حال تغییر ماهرانه به روش هایی است که با نحو هاسکل ناسازگار است. وجود دارد
به عنوان مثال، برای مثال، شکافهای رشتهها و کاراکترهای اصلی همیشه مشکل داشت
شناسه ها این مشکلات فقط بدتر می شوند.
بنابراین، تلاش برای ارائه جایگزینی برای cpp که با هر دو سازگارتر است، درست به نظر می رسید
Haskell، و خودش در Haskell نوشته شده تا بتوان آن را با کامپایلرها توزیع کرد.
cpphs تقریباً دارای ویژگی کامل است و با آن سازگار است -سنتی سبک cpp
دو حالت دارد:
فقط تالیف مشروط (--nomacro),
و توسعه کلان کامل (پیش فرض).
In --nomacro حالت ، cpphs فقط اقدامات کامپایل مشروط را انجام می دهد، یعنی #include،
#اگر'شن #ifdef'ها بر اساس تعاریف جایگزینی متن پردازش می شوند (هر دو دستور-
خط و داخلی)، اما هیچ بسط ماکرو پارامتری انجام نشده است. تمام و کمال
حالت سازگاری (پیشفرض)، جایگزینهای متنی و بسطهای ماکرو نیز هستند
در قسمت باقیمانده متن غیر cpp پردازش می شود.
ویژگی های کاری:
#ifdef تالیف شرطی ساده
#اگر زبان بولی کامل defined()، &&، ||، ==، و غیره.
#الیف شرطی های زنجیره ای
#تعريف كردن
تعاریف درون خطی (جایگزینی متن و ماکرو)
# وندف ابطال درون خطی تعاریف
#include
گنجاندن فایل
#خط دستورالعمل شماره خط
\n ادامه خط در همه # دستورالعمل
/ ** / کاتناسیون نشانه در یک تعریف کلان
## کاتناسیون توکن به سبک ANSI
# رشتهبندی توکن به سبک ANSI
__فایل__
جایگزینی متن ویژه برای پیام های خطای DIY
__LINE__
جایگزینی متن ویژه برای پیام های خطای DIY
__تاریخ__
جایگزینی متن ویژه
__زمان__
جایگزینی متن ویژه
بسط ماکرو بازگشتی است. تعریف مجدد نام ماکرو اخطاری ایجاد نمی کند.
ماکروها را می توان در خط فرمان با تعریف کرد -D درست مانند جایگزین های متنی. ماکرو
نام ها مجاز هستند که شناسه های Haskell باشند، به عنوان مثال با علامت اول و بک تیک.
کاراکترها، که کمی شلتر از C است، اما ممکن است هنوز شامل عملگر نباشند
نمادها
شماره گذاری خطوط در خروجی حفظ می شود تا هر پردازنده بعدی بتواند ارائه دهد
پیام های خطای معنی دار زمانی که یک فایل است #includeد، cpphs درج #خط بخشنامه ها برای
به همین دلیل حتی در صورت وجود ادامه خط، شماره گذاری باید صحیح باشد.
اگر شما نمی خواهید #خط دستورالعمل ها در خروجی نهایی، استفاده از -- نولین گزینه.
هر گونه خطای نحوی در دستورات cpp پیامی به stderr می دهد و برنامه را متوقف می کند.
عدم یافتن یک فایل #include'd یک هشدار برای stderr ایجاد می کند، اما پردازش ادامه می یابد.
شما می توانید هر تعداد نام فایل را در خط فرمان بدهید. نتایج در کاتانته شده است
خروجی استاندارد
-Dهمزاد یک جایگزین متنی تعریف کنید (مقدار پیش فرض 1 است)
-Dsym=وال
یک جایگزین متنی با یک مقدار خاص تعریف کنید
-Iمسیر یک دایرکتوری به مسیر جستجو برای #include's اضافه کنید
-Oپرونده یک فایل برای خروجی مشخص کنید (پیشفرض stdout است)
--nomacro
فقط #ifdef و #include را پردازش کنید،
ماکروها را گسترش ندهید
-- نولین
فضله #خط را از خروجی حذف کنید
-- نوار
تبدیل نظرات به سبک C به فضای خالی، حتی در خارج
دستورالعمل های cpp
--هش
عملگر ANSI # stringise و ## را برای
کاتناسیون توکن، در ماکروها
--متن ورودی را به عنوان متن ساده در نظر بگیرید، نه کد Haskell
--چیدمان
حفظ خطوط جدید در بسط های کلان
-- بدون روشنایی
نظرات به سبک سواد را حذف کنید
- نسخه
گزارش شماره نسخه cpph و توقف
هیچ جایگزین متنی به طور پیش فرض تعریف نشده است. (cpp معمولی معمولاً تعاریفی دارد
برای ماشین، سیستم عامل و غیره. در صورت تمایل میتوان این کدها را به راحتی به کد منبع cpphs اضافه کرد.)
مسیر جستجو به ترتیب جستجو می شود -I گزینه ها، به جز اینکه دایرکتوری از
فایل فراخوانی، سپس فهرست فعلی، همیشه ابتدا جستجو میشوند. باز هم وجود ندارد
مسیر جستجوی پیشفرض (و دوباره، این میتواند به راحتی تغییر کند).
تفاوت از CPP
به طور کلی، cpphs بر اساس است -سنتی رفتار، نه ANSI C، و دارد
تفاوت های اصلی زیر با cpp استاندارد.
سوالات عمومی
La # که هر دستور cpp را معرفی می کند باید در ستون اول یک خط باشد (در حالی که
ANSI اجازه می دهد فضای خالی قبل از # ).
را ایجاد می کند #خط n "نام فایل" نحو، نه # n "نام فایل" گونه.
نظرات C فقط از داخل دستورالعمل های cpp حذف می شوند. آنها از دیگران سلب نمی شوند
متن به عنوان مثال در نظر بگیرید که در Haskell، همه موارد زیر عملگر معتبر هستند
نمادها: /* */ * / * با این حال، میتوانید حذف نظر C را با -- نوار گزینه.
درشت دستور زبان
قبول می کند / ** / برای چسباندن رمز در یک تعریف کلان. با این حال، /* */ (با هر متنی
بین دیدگاه باز/بستن) فضای خالی را درج می کند.
ANSI ## اپراتور توکن چسباندن با --هش پرچم. این برای اجتناب است
تفسیر نادرست از هر عملگر معتبر Haskell به همین نام.
یک پارامتر رسمی کلان را با واقعی، حتی در داخل یک رشته (دو یا تک) جایگزین می کند
نقل شده). این یک رفتار سنتی است که در ANSI پشتیبانی نمی شود.
را به رسمیت می شناسد # عملگر stringisation در یک تعریف کلان تنها در صورتی که از آن استفاده کنید --هش
گزینه. (این یک افزودنی ANSI است، فقط به این دلیل لازم است که رشتهبندی نقل قول شده (بالا) وجود دارد
توسط ANSI ممنوع است.)
فضای خالی را در یک تعریف جایگزین متنی دقیقاً حفظ می کند (مدول خطوط جدید)،
اما فضای پیشرو و عقب حذف شده است.
فضای خالی را در یک تعریف کلان (و دنبال کردن آن) دقیقاً (مدول) حفظ می کند
خطوط جدید)، اما فضای پیشرو حذف شده است.
فضای خالی را در آرگومان های فراخوانی ماکرو دقیقاً (از جمله خطوط جدید) اما پیشرو حفظ می کند
و فضای عقب حذف می شود.
با --چیدمان گزینه، ادامه خط در جایگزینی متنی یا تعریف کلان
در فراخوانی ماکرو به عنوان خط شکن حفظ می شوند. (برای کدهای حساس به چیدمان مفید است
هاسکل.)
با استفاده از خدمات onworks.net از cpphs به صورت آنلاین استفاده کنید