Ini ialah arahan cpphs yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
cpphs - prapemproses cpp-a-like meliberalisasikan untuk Haskell
SINOPSIS
cpphs [NAMA FAIL|OPTION]...
DESCRIPTION
cpphs adalah pelaksanaan semula yang diliberalisasikan cpp (1), pra-pemproses C, dalam dan untuk
Haskell.
Mengapa melaksanakan semula cpp? Betul atau salah, pra-pemproses C digunakan secara meluas dalam Haskell
kod sumber. Ia membolehkan kompilasi bersyarat untuk penyusun yang berbeza, berbeza
versi pengkompil yang sama, dan platform OS yang berbeza. Ia juga kadang-kadang digunakan
untuk bahasa makronya, yang boleh membolehkan bentuk butiran khusus platform tertentu-
pengisian, seperti penjanaan boilerplate yang membosankan bagi definisi contoh dan FFI
pengisytiharan. Walau bagaimanapun, terdapat dua masalah dengan cpp, selain daripada estetika yang jelas
satu:
Untuk sesetengah sistem Haskell, terutamanya Hugs pada Windows, cpp benar tidak tersedia oleh
lalai.
Malah untuk sistem Haskell yang lain, cpp biasa disediakan oleh siri gcc 3.x
sedang berubah secara halus dalam cara yang tidak serasi dengan sintaks Haskell. Di sana ada
selalu bermasalah dengan, contohnya, jurang rentetan dan aksara utama dalam
pengecam. Masalah-masalah ini hanya akan menjadi lebih teruk.
Jadi, nampaknya betul untuk cuba menyediakan alternatif kepada cpp, kedua-duanya lebih serasi dengannya
Haskell, dan dirinya sendiri ditulis dalam Haskell supaya ia boleh diedarkan dengan penyusun.
cpphs adalah ciri-ciri yang cukup lengkap, dan serasi dengan -tradisional gaya cpp.
Ia mempunyai dua mod:
kompilasi bersyarat sahaja (--nomacro),
dan pengembangan makro penuh (lalai).
In --nomacro mod, cpphs hanya melakukan tindakan penyusunan bersyarat, iaitu #include,
#jika's, dan #ifdef's diproses mengikut definisi penggantian teks (kedua-dua arahan-
talian dan dalaman), tetapi tiada pengembangan makro berparameter dilakukan. Sepenuhnya
mod keserasian (lalai), penggantian teks dan pengembangan makro juga
diproses dalam kandungan teks bukan cpp yang tinggal.
Ciri-ciri Kerja:
#ifdef kompilasi bersyarat mudah
#jika bahasa boolean penuh takrif(), &&, ||, ==, dsb.
#elif syarat berantai
#tentukan
takrifan dalam talian (penggantian teks dan makro)
#undef pembatalan takrifan dalam talian
#include
kemasukan fail
#garisan arahan nombor baris
\n sambungan talian dalam semua # arahan
/ ** / catenation token dalam definisi makro
## Katenasi token gaya ANSI
# Rentetan token gaya ANSI
__FAIL__
penggantian teks khas untuk mesej ralat DIY
__LINE__
penggantian teks khas untuk mesej ralat DIY
__TARIKH__
penggantian teks khas
__MASA__
penggantian teks khas
Pengembangan makro adalah rekursif. Takrifan semula nama makro tidak menghasilkan amaran.
Makro boleh ditakrifkan pada baris arahan dengan -D sama seperti penggantian teks. Makro
nama dibenarkan untuk menjadi pengecam Haskell cth dengan prima ` dan backtick ´
aksara, yang lebih longgar sedikit daripada dalam C, tetapi mereka masih mungkin tidak termasuk operator
simbol.
Penomboran baris dalam output dikekalkan supaya mana-mana pemproses kemudian boleh memberi
mesej ralat yang bermakna. Apabila fail adalah #include'd, cpphs sisipan #garisan arahan untuk
sebab yang sama. Penomboran harus betul walaupun terdapat sambungan baris.
Sekiranya anda tidak mahu #garisan arahan dalam output akhir, gunakan --noline pilihan.
Sebarang ralat sintaks dalam arahan cpp memberikan mesej kepada stderr dan menghentikan program.
Kegagalan untuk mencari fail #include'd menghasilkan amaran kepada stderr, tetapi pemprosesan diteruskan.
Anda boleh memberikan sebarang bilangan nama fail pada baris arahan. Keputusan dikatenasikan pada
keluaran standard.
-Dsym tentukan penggantian teks (nilai lalai ialah 1)
-Dsym=val
mentakrifkan penggantian teks dengan nilai tertentu
-Ijalan tambahkan direktori pada laluan carian untuk #include's
-Ofail tentukan fail untuk output (lalai ialah stdout)
--nomacro
hanya proses #ifdef dan #include,
jangan kembangkan makro
--noline
keluarkan najis #garisan daripada output
--jalur
tukar komen gaya C kepada ruang putih, walaupun di luar
arahan cpp
--cincang
mengenali pengendali ANSI # stringise, dan ## untuk
katetasi token, dalam makro
- teks layan input sebagai teks biasa, bukan kod Haskell
--susun atur
mengekalkan baris baharu dalam pengembangan makro
--tak bercahaya
buang komen ala celik
--versi
laporkan nombor versi cpph dan hentikan
TIADA penggantian teks yang ditakrifkan secara lalai. (Cpp biasa biasanya mempunyai definisi
untuk mesin, OS, dll. Ini boleh ditambah dengan mudah pada kod sumber cpphs jika anda mahu.)
Laluan carian dicari mengikut urutan -I pilihan, kecuali bahawa direktori
memanggil fail, kemudian direktori semasa, sentiasa dicari dahulu. Sekali lagi, tidak ada
laluan carian lalai (dan sekali lagi, ini boleh ditukar dengan mudah).
PERBEZAAN DARIPADA CPP
Secara amnya, cpphs adalah berdasarkan kepada -tradisional tingkah laku, bukan ANSI C, dan mempunyai
berikutan perbezaan utama daripada cpp standard.
Umum
. # yang memperkenalkan sebarang arahan cpp mestilah dalam lajur pertama baris (sedangkan
ANSI membenarkan ruang kosong sebelum # ).
Menghasilkan #garisan n "nama fail" sintaks, bukan # n "nama fail" pelbagai.
Komen C hanya dialih keluar dari dalam arahan cpp. Mereka tidak dilucutkan daripada yang lain
teks. Pertimbangkan sebagai contoh bahawa dalam Haskell, semua yang berikut adalah pengendali yang sah
simbol: /* */ * / * Walau bagaimanapun, anda boleh menghidupkan pengalihan keluar C-komen dengan --jalur pilihan.
Makro bahasa
Menerima / ** / untuk penampalan token dalam definisi makro. Walau bagaimanapun, /* */ (dengan sebarang teks
antara komen buka/tutup) memasukkan ruang kosong.
ANSI ## pengendali penampal token tersedia dengan --cincang bendera. Ini untuk mengelak
salah tafsir mana-mana pengendali Haskell yang sah dengan nama yang sama.
Menggantikan parameter formal makro dengan yang sebenar, walaupun di dalam rentetan (double atau single
dipetik). Ini adalah tingkah laku tradisional, tidak disokong dalam ANSI.
Mengiktiraf # operator stringisation dalam definisi makro hanya jika anda menggunakan --cincang
pilihan. (Ia adalah tambahan ANSI, hanya diperlukan kerana rentetan yang dipetik (di atas) adalah
dilarang oleh ANSI.)
Mengekalkan ruang putih dalam definisi penggantian teks dengan tepat (modul baris baharu),
tetapi ruang depan dan belakang dihapuskan.
Mengekalkan ruang putih dalam definisi makro (dan mengekorinya) dengan tepat (modulo
baris baharu), tetapi ruang utama dihapuskan.
Mengekalkan ruang putih dalam argumen panggilan makro dengan tepat (termasuk baris baharu), tetapi mendahului
dan ruang belakang dihapuskan.
Dengan --susun atur pilihan, sambungan baris dalam penggantian teks atau definisi makro
dikekalkan sebagai pemisah talian dalam panggilan makro. (Berguna untuk kod sensitif reka letak dalam
Haskell.)
Gunakan cpphs dalam talian menggunakan perkhidmatan onworks.net