ນີ້ແມ່ນຄໍາສັ່ງ cpphs-hugs ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
cpphs - liberalized cpp-a-like preprocessor ສໍາລັບ Haskell
ສະຫຼຸບສັງລວມ
cpphs [ຊື່ເອກະສານ|ທາງເລືອກ] ...
ລາຍລະອຽດ
cpphs ເປັນການປະຕິບັດຄືນໃຫມ່ເປີດເສລີຂອງ cpp (1) C pre-processor, ໃນແລະສໍາລັບ
Haskell.
ເປັນຫຍັງການຈັດຕັ້ງປະຕິບັດ cpp ຄືນໃໝ່? ຖືກຫຼືຜິດ, C pre-processor ຖືກນໍາໃຊ້ຢ່າງກວ້າງຂວາງໃນ Haskell
ລະຫັດແຫຼ່ງ. ມັນເຮັດໃຫ້ການລວບລວມເງື່ອນໄຂສໍາລັບການລວບລວມຂໍ້ມູນທີ່ແຕກຕ່າງກັນ, ທີ່ແຕກຕ່າງກັນ
ຮຸ່ນຂອງຄອມພີວເຊີດຽວກັນ, ແລະແພລະຕະຟອມ OS ທີ່ແຕກຕ່າງກັນ. ມັນຍັງຖືກນໍາໃຊ້ເປັນບາງໂອກາດ
ສໍາລັບພາສາມະຫາພາກຂອງຕົນ, ທີ່ສາມາດເຮັດໃຫ້ຮູບແບບສະເພາະໃດຫນຶ່ງຂອງລະອຽດສະເພາະເວທີການ.
ການຕື່ມ, ເຊັ່ນການສ້າງ boilerplate tedious ຂອງຄໍານິຍາມຕົວຢ່າງແລະ FFI
ຖະແຫຼງການ. ຢ່າງໃດກໍ່ຕາມ, ມີສອງບັນຫາກັບ cpp, ນອກເຫນືອຈາກຄວາມງາມທີ່ຊັດເຈນ
ອັນທີ່:
ສໍາລັບບາງລະບົບ Haskell, ໂດຍສະເພາະ Hugs ໃນ Windows, cpp ທີ່ແທ້ຈິງແມ່ນບໍ່ສາມາດໃຊ້ໄດ້ໂດຍ
Default
ເຖິງແມ່ນວ່າສໍາລັບລະບົບ Haskell ອື່ນໆ, cpp ທົ່ວໄປທີ່ສະຫນອງໂດຍຊຸດ gcc 3.x
ມີການປ່ຽນແປງເລັກນ້ອຍໃນທາງທີ່ບໍ່ເຂົ້າກັນກັບ syntax ຂອງ Haskell. ມີ
ສະເຫມີມີບັນຫາກັບ, ສໍາລັບການຍົກຕົວຢ່າງ, ຊ່ອງຫວ່າງສາຍ, ແລະລັກສະນະຕົ້ນຕໍໃນ
ຕົວລະບຸ. ບັນຫາເຫຼົ່ານີ້ພຽງແຕ່ຈະຮ້າຍແຮງຂຶ້ນ.
ດັ່ງນັ້ນ, ມັນເບິ່ງຄືວ່າຖືກຕ້ອງທີ່ຈະພະຍາຍາມສະຫນອງທາງເລືອກສໍາລັບ cpp, ທັງສອງທີ່ເຫມາະສົມກັບ
Haskell, ແລະຕົວຂອງມັນເອງຂຽນໃນ Haskell ເພື່ອໃຫ້ມັນສາມາດແຈກຢາຍກັບ compilers.
cpphs ແມ່ນ pretty-much feature-complete, ແລະເຂົ້າກັນໄດ້ກັບ - ແບບດັ້ງເດີມ ແບບຂອງ cpp.
ມັນມີສອງຮູບແບບ:
ການລວບລວມເງື່ອນໄຂເທົ່ານັ້ນ (--nomacro),
ແລະການຂະຫຍາຍມະຫາພາກເຕັມ (ຄ່າເລີ່ມຕົ້ນ).
In --nomacro ຮູບແບບ, cpphs ປະຕິບັດພຽງແຕ່ການປະຕິບັດການລວບລວມເງື່ອນໄຂ, ie #includeຂອງ,
# ຖ້າ's, ແລະ #ifdef's ຖືກປະມວນຜົນຕາມຄໍານິຍາມການປ່ຽນຂໍ້ຄວາມ (ທັງສອງຄໍາສັ່ງ-
ເສັ້ນແລະພາຍໃນ), ແຕ່ບໍ່ມີການຂະຫຍາຍມະຫາພາກ parameterised ແມ່ນປະຕິບັດ. ເຕັມ
ຮູບແບບຄວາມເຂົ້າກັນໄດ້ (ຄ່າເລີ່ມຕົ້ນ), ການປ່ຽນຂໍ້ຄວາມແລະການຂະຫຍາຍມະຫາພາກ
ປະມວນຜົນໃນສ່ວນທີ່ຍັງເຫຼືອຂອງຂໍ້ຄວາມທີ່ບໍ່ແມ່ນ cpp.
ຄຸນລັກສະນະການເຮັດວຽກ:
#ifdef ການລວບລວມເງື່ອນໄຂງ່າຍດາຍ
# ຖ້າ ພາສາ boolean ເຕັມຂອງ defined(), &&, ||, ==, ແລະອື່ນໆ.
#ເອລີຟ ເງື່ອນໄຂຖືກຕ່ອງໂສ້
#ກໍານົດ
ຄໍານິຍາມໃນແຖວ (ການປ່ຽນຂໍ້ຄວາມ ແລະມາໂຄຣ)
#ສຸດຍອດ ການຖອນຄໍານິຍາມໃນແຖວ
#include
ລວມໄຟລ໌
#ສາຍ ຄໍາສັ່ງເລກແຖວ
\n ການສືບຕໍ່ສາຍພາຍໃນທັງໝົດ # ຄຳແນະນຳ
/ ** / token catenation ພາຍໃນຄໍານິຍາມມະຫາພາກ
## ການແຍກໂທເຄັນແບບ ANSI
# ການປັບຕົວໂທເຄັນແບບ ANSI
__FILE__
ການທົດແທນຂໍ້ຄວາມພິເສດສໍາລັບຂໍ້ຄວາມຄວາມຜິດພາດ DIY
__LINE__
ການທົດແທນຂໍ້ຄວາມພິເສດສໍາລັບຂໍ້ຄວາມຄວາມຜິດພາດ DIY
__DATE__
ການປ່ຽນແທນຂໍ້ຄວາມພິເສດ
__TIME__
ການປ່ຽນແທນຂໍ້ຄວາມພິເສດ
ການຂະຫຍາຍຕົວ Macro ແມ່ນ recursive. ການໃຫ້ຄຳນິຍາມໃໝ່ຂອງຊື່ມະຫາພາກບໍ່ໄດ້ສ້າງຄຳເຕືອນ.
Macros ສາມາດຖືກກໍານົດຢູ່ໃນເສັ້ນຄໍາສັ່ງທີ່ມີ -D ຄືກັນກັບການທົດແທນຂໍ້ຄວາມ. ມະຫາພາກ
ຊື່ແມ່ນອະນຸຍາດໃຫ້ເປັນ Haskell ຕົວລະບຸຕົວຢ່າງທີ່ມີ prime `ແລະ backtick ´
ຕົວອັກສອນ, ເຊິ່ງແມ່ນຫນ້ອຍກ່ວາໃນ C, ແຕ່ພວກເຂົາເຈົ້າຍັງບໍ່ສາມາດປະກອບດ້ວຍຕົວປະຕິບັດການ
ສັນຍາລັກ.
ຕົວເລກຂອງສາຍໃນຜົນຜະລິດແມ່ນເກັບຮັກສາໄວ້ເພື່ອໃຫ້ໂຮງງານຜະລິດຕໍ່ມາສາມາດໃຫ້
ຂໍ້ຄວາມຜິດພາດທີ່ມີຄວາມຫມາຍ. ໃນເວລາທີ່ໄຟລ໌ແມ່ນ #include'd, cpphs inserts #ສາຍ ຄໍາແນະນໍາສໍາລັບ
ເຫດຜົນດຽວກັນ. ຕົວເລກຄວນຈະຖືກຕ້ອງເຖິງແມ່ນວ່າຢູ່ໃນການສືບຕໍ່ແຖວ.
ຖ້າເຈົ້າບໍ່ຕ້ອງການ #ສາຍ ຄໍາແນະນໍາໃນຜົນໄດ້ຮັບສຸດທ້າຍ, ໃຊ້ --noline ທາງເລືອກ.
ຂໍ້ຜິດພາດຂອງ syntax ໃດໆໃນຄໍາສັ່ງ cpp ຈະສົ່ງຂໍ້ຄວາມໄປຫາ stderr ແລະຢຸດໂຄງການ.
ການລົ້ມເຫລວໃນການຊອກຫາໄຟລ໌ #include'd ເຮັດໃຫ້ເກີດການເຕືອນ stderr, ແຕ່ການປະມວນຜົນຍັງສືບຕໍ່.
ທ່ານສາມາດໃຫ້ຈໍານວນຂອງຊື່ໄຟລ໌ໃນບັນຊີຄໍາສັ່ງ. ຜົນໄດ້ຮັບແມ່ນ catenated ສຸດ
ຜົນຜະລິດມາດຕະຖານ.
-Dຊິມ ກໍານົດການປ່ຽນຂໍ້ຄວາມ (ຄ່າເລີ່ມຕົ້ນແມ່ນ 1)
-Dsym=h
ກໍານົດການທົດແທນຂໍ້ຄວາມທີ່ມີຄ່າສະເພາະ
-Iເສັ້ນທາງ ເພີ່ມໄດເລກະທໍລີໄປຫາເສັ້ນທາງຄົ້ນຫາສໍາລັບ #include's
-Oເອກະສານ ລະບຸໄຟລ໌ສໍາລັບຜົນຜະລິດ (ຄ່າເລີ່ມຕົ້ນແມ່ນ stdout)
--nomacro
ພຽງແຕ່ຂະບວນການ #ifdef ແລະ #includes,
ບໍ່ຂະຫຍາຍມະຫາພາກ
--noline
ເອົາ #line droppings ອອກຈາກຜົນຜະລິດ
--ເສັ້ນ
ປ່ຽນຄຳເຫັນແບບ C ໃຫ້ເປັນຊ່ອງຫວ່າງ, ແມ້ແຕ່ຢູ່ນອກ
cpp ຄໍາແນະນໍາ
--hashes
ຮັບຮູ້ ANSI # stringise operator, ແລະ ## for
token catenation, ພາຍໃນ macro
--ຂໍ້ຄວາມ ປະຕິບັດການປ້ອນຂໍ້ມູນເປັນຂໍ້ຄວາມທຳມະດາ, ບໍ່ແມ່ນລະຫັດ Haskell
-- ຮູບແບບ
ຮັກສາສາຍໃຫມ່ພາຍໃນການຂະຫຍາຍມະຫາພາກ
--unlit
ລົບລ້າງຄວາມຄິດເຫັນທີ່ຮູ້ຫນັງສື
- ການປ່ຽນແປງ
ລາຍງານຈໍານວນເວີຊັນຂອງ cpphs ແລະຢຸດ
ບໍ່ມີການປ່ຽນແທນຂໍ້ຄວາມທີ່ກຳນົດໄວ້ຕາມຄ່າເລີ່ມຕົ້ນ. (cpp ປົກກະຕິມັກຈະມີຄໍານິຍາມ
ສໍາລັບເຄື່ອງ, OS, ແລະອື່ນໆ. ສິ່ງເຫຼົ່ານີ້ສາມາດຖືກເພີ່ມໃສ່ລະຫັດແຫຼ່ງ cpphs ໄດ້ຢ່າງງ່າຍດາຍຖ້າທ່ານຕ້ອງການ.)
ເສັ້ນທາງຄົ້ນຫາແມ່ນຊອກຫາຕາມລໍາດັບ -I ທາງເລືອກ, ຍົກເວັ້ນວ່າໄດເລກະທໍລີຂອງ
ໄຟລ໌ການໂທ, ຫຼັງຈາກນັ້ນ, ໄດເລກະທໍລີປະຈຸບັນ, ສະເຫມີຖືກຄົ້ນຫາກ່ອນ. ອີກເທື່ອຫນຶ່ງ, ບໍ່ມີ
ເສັ້ນທາງຄົ້ນຫາເລີ່ມຕົ້ນ (ແລະອີກເທື່ອຫນຶ່ງ, ນີ້ສາມາດປ່ຽນແປງໄດ້ງ່າຍ).
ຄວາມແຕກຕ່າງ ຈາກ CPP
ໂດຍທົ່ວໄປ, cpphs ແມ່ນອີງໃສ່ - ແບບດັ້ງເດີມ ພຶດຕິກໍາ, ບໍ່ແມ່ນ ANSI C, ແລະມີ
ປະຕິບັດຕາມຄວາມແຕກຕ່າງຕົ້ນຕໍຈາກ cpp ມາດຕະຖານ.
ໂດຍທົ່ວໄປ
ໄດ້ # ທີ່ແນະນໍາ cpp ຄໍາສັ່ງໃດໆຕ້ອງຢູ່ໃນຖັນທໍາອິດຂອງແຖວ (ໃນຂະນະທີ່
ANSI ອະນຸຍາດໃຫ້ຊ່ອງຫວ່າງກ່ອນ # ).
ສ້າງ #ສາຍ n "ຊື່ເອກະສານ" syntax, ບໍ່ແມ່ນ # n "ຊື່ເອກະສານ"ຕົວແປ.
ຄໍາຄິດເຫັນ C ຖືກເອົາອອກຈາກພາຍໃນຄໍາສັ່ງ cpp ເທົ່ານັ້ນ. ພວກເຂົາເຈົ້າບໍ່ໄດ້ຖືກລອກເອົາຈາກອື່ນໆ
ຂໍ້ຄວາມ. ພິຈາລະນາຕົວຢ່າງວ່າໃນ Haskell, ທັງຫມົດຕໍ່ໄປນີ້ແມ່ນຕົວປະຕິບັດການທີ່ຖືກຕ້ອງ
ສັນຍາລັກ: /* */ * / * ຢ່າງໃດກໍຕາມ, ທ່ານສາມາດເປີດການໂຍກຍ້າຍ C-comment ກັບ the --ເສັ້ນ ທາງເລືອກ.
Macro ພາສາ
ຍອມຮັບ / ** / ສໍາລັບການວາງ token ໃນຄໍານິຍາມ macro. ແນວໃດກໍ່ຕາມ, /* */ (ດ້ວຍຂໍ້ຄວາມໃດນຶ່ງ
ລະຫວ່າງຄຳເຫັນເປີດ/ປິດ) ໃສ່ຊ່ອງຫວ່າງ.
ANSI ## ຕົວປະຕິບັດການ token-pasting ສາມາດໃຊ້ໄດ້ກັບ --hashes ທຸງ. ນີ້ແມ່ນເພື່ອຫຼີກເວັ້ນການ
ການຕີຄວາມຜິດອັນໃດນຶ່ງຂອງຕົວປະຕິບັດການ Haskell ທີ່ຖືກຕ້ອງຂອງຊື່ດຽວກັນ.
ແທນທີ່ພາຣາມິເຕີທີ່ເປັນທາງການຂອງມະຫາພາກດ້ວຍຕົວຈິງ, ເຖິງແມ່ນວ່າຢູ່ໃນສະຕຣິງ (ຄູ່ ຫຼືອັນດຽວ
ອ້າງອີງ). ນີ້ແມ່ນ - ພຶດຕິກໍາແບບດັ້ງເດີມ, ບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນໃນ ANSI.
ຮັບຮູ້ # ຕົວປະຕິບັດການ stringisation ໃນຄໍານິຍາມ macro ພຽງແຕ່ຖ້າທ່ານໃຊ້ --hashes
ທາງເລືອກ. (ມັນເປັນການເພີ່ມ ANSI, ພຽງແຕ່ຕ້ອງການເນື່ອງຈາກວ່າ stringisation ວົງຢືມ (ຂ້າງເທິງ) ແມ່ນ
ຫ້າມໂດຍ ANSI.)
ຮັກສາພື້ນທີ່ຂາວພາຍໃນຄຳນິຍາມການປ່ຽນຂໍ້ຄວາມຢ່າງແນ່ນອນ (modulo newlines),
ແຕ່ພື້ນທີ່ຊັ້ນນໍາແລະທາງຫລັງຖືກລົບລ້າງ.
ຮັກສາພື້ນທີ່ຂາວພາຍໃນນິຍາມມະຫາພາກ (ແລະຕິດຕາມມັນ) ຢ່າງແນ່ນອນ (ໂມດູໂລ
newlines), ແຕ່ຊ່ອງຊັ້ນນໍາແມ່ນຖືກລົບລ້າງ.
ຮັກສາຊ່ອງຫວ່າງພາຍໃນການໂຕ້ຖຽງການໂທມະຫາພາກຢ່າງແນ່ນອນ (ລວມທັງແຖວໃໝ່), ແຕ່ນຳໜ້າ
ແລະພື້ນທີ່ trailing ໄດ້ຖືກລົບລ້າງ.
ມີ -- ຮູບແບບ ທາງເລືອກ, ການສືບຕໍ່ເສັ້ນໃນການທົດແທນຕົວຫນັງສືຫຼືຄໍານິຍາມ macro
ຖືກຮັກສາໄວ້ເປັນການແບ່ງແຖວໃນການໂທມະຫາພາກ. (ເປັນປະໂຫຍດສໍາລັບການຈັດວາງລະຫັດທີ່ລະອຽດອ່ອນໃນ
Haskell.)
ໃຊ້ cpphs-hugs ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net