ນີ້ແມ່ນຄໍາສັ່ງ re2c ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
re2c - ປ່ຽນການສະແດງອອກປົກກະຕິເປັນລະຫັດ C/C++
ສະຫຼຸບສັງລວມ
re2c [ຕົວເລືອກ] ເອກະສານ
ລາຍລະອຽດ
re2c ເປັນເຄື່ອງກໍາເນີດ lexer ສໍາລັບ C/C ++. ມັນພົບເຫັນສະເພາະການສະແດງອອກປົກກະຕິພາຍໃນຂອງ
ຄຳເຫັນ C/C++ ແລະປ່ຽນແທນພວກມັນດ້ວຍ DFA ທີ່ມີລະຫັດຍາກ. ຜູ້ໃຊ້ຕ້ອງສະຫນອງບາງຢ່າງ
ລະຫັດການໂຕ້ຕອບເພື່ອຄວບຄຸມແລະປັບແຕ່ງ DFA ທີ່ສ້າງຂຶ້ນ.
OPTIONS
-? -h - ຊ່ວຍ
ຂໍຄວາມຊ່ວຍເຫຼືອສັ້ນໆ.
-b --bit-vectors
ຫມາຍເຖິງ -s. ໃຊ້ vectors ບິດເຊັ່ນດຽວກັນໃນຄວາມພະຍາຍາມທີ່ຈະ coax ລະຫັດທີ່ດີກວ່າອອກຈາກ
ສັງລວມ. ທີ່ເປັນປະໂຫຍດທີ່ສຸດສໍາລັບການສະເພາະທີ່ມີຫຼາຍກ່ວາສອງສາມຄໍາ (ເຊັ່ນ: ສໍາລັບ
ພາສາການຂຽນໂປຼແກຼມສ່ວນໃຫຍ່).
-c --ເງື່ອນໄຂ
ໃຊ້ເພື່ອສະຫນັບສະຫນູນ (f) ສະຫນັບສະຫນູນເງື່ອນໄຂ lex.
-d --debug-output
ສ້າງ parser ທີ່ dumps ຂໍ້ມູນກ່ຽວກັບຕໍາແຫນ່ງປະຈຸບັນແລະໃນທີ່
ລະບຸວ່າຕົວວິເຄາະແມ່ນໃນຂະນະທີ່ກຳລັງວິເຄາະການປ້ອນຂໍ້ມູນ. ອັນນີ້ເປັນປະໂຫຍດເພື່ອແກ້ໄຂບັນຫາການແຍກວິເຄາະ
ແລະລັດ. ຖ້າທ່ານໃຊ້ສະວິດນີ້, ທ່ານຈໍາເປັນຕ້ອງກໍານົດ macro YYDEBUG ນັ້ນແມ່ນ
ເອີ້ນວ່າຟັງຊັນທີ່ມີສອງຕົວກໍານົດການ: void YYDEBUG (int ລັດ, char ປັດຈຸບັນ).
ຕົວກໍານົດການທໍາອິດໄດ້ຮັບລັດຫຼື -1 ແລະຕົວກໍານົດການທີສອງໄດ້ຮັບ
ການປ້ອນຂໍ້ມູນໃສ່ຕົວກະພິບປັດຈຸບັນ.
-D --emit-dot
ປ່ອຍຂໍ້ມູນຈຸດ Graphviz. ມັນຫຼັງຈາກນັ້ນສາມາດໄດ້ຮັບການປຸງແຕ່ງກັບ eg ຈຸດ -Tpng input.dot >
output.png. ກະລຸນາຮັບຊາບວ່າເຄື່ອງສະແກນທີ່ມີຫຼາຍລັດອາດມີຈຸດຂັດຂ້ອງ.
-e --ecb
ສ້າງຕົວວິເຄາະທີ່ຮອງຮັບ EBCDIC. ລະຫັດທີ່ສ້າງຂຶ້ນສາມາດຈັດການກັບໃດໆ
ຕົວອັກສອນສູງເຖິງ 0xFF. ໃນຮູບແບບນີ້ re2c ສົມມຸດວ່າຂະໜາດຕົວອັກສອນທີ່ປ້ອນເຂົ້າແມ່ນ 1
ໄບຕ໌. ສະວິດນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບ -w, -x, -u ແລະ -8.
-f --storable-state
ສ້າງເຄື່ອງສະແກນທີ່ມີການສະຫນັບສະຫນູນສໍາລັບສະຖານະທີ່ເກັບໄວ້ໄດ້.
-F --flex-syntax
ສະຫນັບສະຫນູນບາງສ່ວນສໍາລັບ syntax flex. ເມື່ອທຸງນີ້ເຄື່ອນໄຫວແລ້ວຈຶ່ງຕັ້ງຊື່ໃຫ້ຄຳນິຍາມ
ຕ້ອງຖືກອ້ອມຮອບດ້ວຍວົງເລັບ curly ແລະສາມາດຖືກກໍານົດໂດຍບໍ່ມີເຄື່ອງຫມາຍເທົ່າທຽມກັນແລະ
ການຢຸດເຊົາການລໍາຕົ້ນເຄິ່ງ. ແທນທີ່ຈະຊື່ຖືກປະຕິບັດເປັນສາຍທີ່ອ້າງອີງຄູ່ໂດຍກົງ.
-g --computed-gotos
ສ້າງເຄື່ອງສະແກນທີ່ນໍາໃຊ້ຄຸນສົມບັດ goto ຄອມພິວເຕີ້ຂອງ GCC. ນັ້ນແມ່ນ re2c
ສ້າງຕາຕະລາງເຕັ້ນໄປຫາທຸກຄັ້ງທີ່ການຕັດສິນໃຈມີຄວາມຊັບຊ້ອນທີ່ແນ່ນອນ (ຕົວຢ່າງຫຼາຍ
ຖ້າເງື່ອນໄຂແມ່ນມີຄວາມຈໍາເປັນຖ້າບໍ່ດັ່ງນັ້ນ). ນີ້ແມ່ນໃຊ້ໄດ້ກັບ GCC ແລະຜະລິດເທົ່ານັ້ນ
ຜົນຜະລິດທີ່ບໍ່ສາມາດລວບລວມກັບ compiler ອື່ນໆ. ໃຫ້ສັງເກດວ່ານີ້ຫມາຍເຖິງ -b
ແລະວ່າຂອບເຂດຄວາມຊັບຊ້ອນສາມາດຖືກຕັ້ງຄ່າໂດຍໃຊ້ການຕັ້ງຄ່າ inplace
cgoto:ເກນ.
-i --no-debug-info
ບໍ່ໃຫ້ຜົນຜະລິດ #ສາຍ ຂໍ້ມູນ. ນີ້ແມ່ນເປັນປະໂຫຍດເມື່ອທ່ານຕ້ອງການໃຊ້ເຄື່ອງມື CMS ກັບ
ໄດ້ re2c ຜົນຜະລິດທີ່ທ່ານອາດຈະຕ້ອງການຖ້າທ່ານບໍ່ຕ້ອງການໃຫ້ຜູ້ໃຊ້ຂອງທ່ານມີ re2c
ຕົວເອງເມື່ອສ້າງຈາກແຫຼ່ງຂອງເຈົ້າ.
-o OUTPUT --output=OUTPUT
ລະບຸວ່າ OUTPUT ຍື່ນ.
-r -- ໃຊ້ຄືນໄດ້
ອະນຸຍາດໃຫ້ນໍາໃຊ້ຄືນໃຫມ່ຂອງຄໍານິຍາມເຄື່ອງສະແກນກັບ /*!ໃຊ້:re2c */ ຫຼັງຈາກ /*!ກົດລະບຽບ:re2c */. ໃນ
ໂໝດນີ້ບໍ່ /*!re2c */ ບລັອກແລະແນ່ນອນຫນຶ່ງ /*!ກົດລະບຽບ:re2c */ ຕ້ອງມີຢູ່.
ກົດລະບຽບແມ່ນໄດ້ຖືກບັນທືກແລະນໍາໃຊ້ໂດຍທຸກ /*!ໃຊ້:re2c */ ບລັອກທີ່ປະຕິບັດຕາມ.
ຕັນເຫຼົ່ານີ້ສາມາດມີການຕັ້ງຄ່າ inplace, ໂດຍສະເພາະ re2c:ທຸງ:e,
re2c:ທຸງ:w, re2c:ທຸງ:x, re2c:ທຸງ:u ແລະ re2c:ທຸງ:8. ດ້ວຍວິທີນັ້ນມັນເປັນໄປໄດ້
ເພື່ອສ້າງເຄື່ອງສະແກນດຽວກັນຫຼາຍຄັ້ງສໍາລັບປະເພດຕົວອັກສອນທີ່ແຕກຕ່າງກັນ, ແຕກຕ່າງກັນ
ກົນໄກການປ້ອນຂໍ້ມູນ ຫຼືກົນໄກການສົ່ງອອກທີ່ແຕກຕ່າງກັນ. ໄດ້ /*!ໃຊ້:re2c */ ທ່ອນໄມ້ສາມາດ
ຍັງມີກົດລະບຽບເພີ່ມເຕີມທີ່ຈະຖືກຕື່ມໃສ່ກັບຊຸດຂອງກົດລະບຽບໃນ
/*!ກົດລະບຽບ:re2c */.
-s --nested-ifs
ສ້າງ ifs ຊ້ອນສໍາລັບບາງປຸ່ມ. ຜູ້ສັງລວມຈໍານວນຫຼາຍຕ້ອງການການຊ່ວຍເຫຼືອນີ້ເພື່ອສ້າງ
ລະຫັດທີ່ດີກວ່າ.
-t ຫົວ ໜ້າ --type-header=ຫົວ
ສ້າງເປັນ ຫົວ ໜ້າ ໄຟລ໌ທີ່ປະກອບດ້ວຍປະເພດສໍາລັບການສະຫນັບສະຫນູນເງື່ອນໄຂ (f) lex.
ນີ້ສາມາດເປີດໃຊ້ໄດ້ເມື່ອ -c ແມ່ນຢູ່ໃນການນໍາໃຊ້.
-u --unicode
ສ້າງຕົວວິເຄາະທີ່ຮອງຮັບ UTF-32. ລະຫັດທີ່ສ້າງຂຶ້ນສາມາດຈັດການກັບສິ່ງທີ່ຖືກຕ້ອງ
ຕົວອັກສອນ Unicode ສູງສຸດ 0x10FFFF. ໃນຮູບແບບນີ້ re2c ສົມມຸດວ່າຕົວປ້ອນຂໍ້ມູນນັ້ນ
ຂະຫນາດແມ່ນ 4 bytes. ສະວິດນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບ -e, -w, -x ແລະ -8. ນີ້ຫມາຍຄວາມວ່າ
-s.
-v - ການປ່ຽນແປງ
ສະແດງຂໍ້ມູນສະບັບ.
-V --vernum
ສະແດງເວີຊັນເປັນຕົວເລກ XXYYZZ.
-w -- ຕົວອັກສອນກວ້າງ
ສ້າງຕົວວິເຄາະທີ່ຮອງຮັບ UCS-2. ລະຫັດທີ່ສ້າງຂຶ້ນສາມາດຈັດການກັບສິ່ງທີ່ຖືກຕ້ອງ
ຕົວອັກສອນ Unicode ສູງສຸດ 0xFFFF. ໃນຮູບແບບນີ້ re2c ສົມມຸດວ່າຕົວປ້ອນຂໍ້ມູນນັ້ນ
ຂະຫນາດແມ່ນ 2 bytes. ສະວິດນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບ -e, -x, -u ແລະ -8. ນີ້ຫມາຍຄວາມວ່າ
-s.
-x --utf-16
ສ້າງຕົວວິເຄາະທີ່ຮອງຮັບ UTF-16. ລະຫັດທີ່ສ້າງຂຶ້ນສາມາດຈັດການກັບສິ່ງທີ່ຖືກຕ້ອງ
ຕົວອັກສອນ Unicode ສູງສຸດ 0x10FFFF. ໃນຮູບແບບນີ້ re2c ສົມມຸດວ່າຕົວປ້ອນຂໍ້ມູນນັ້ນ
ຂະຫນາດແມ່ນ 2 bytes. ສະວິດນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບ -e, -w, -u ແລະ -8. ນີ້ຫມາຍຄວາມວ່າ
-s.
-8 --utf-8
ສ້າງຕົວວິເຄາະທີ່ຮອງຮັບ UTF-8. ລະຫັດທີ່ສ້າງຂຶ້ນສາມາດຈັດການກັບສິ່ງທີ່ຖືກຕ້ອງ
ຕົວອັກສອນ Unicode ສູງສຸດ 0x10FFFF. ໃນຮູບແບບນີ້ re2c ສົມມຸດວ່າຕົວປ້ອນຂໍ້ມູນນັ້ນ
ຂະຫນາດແມ່ນ 1 byte. ສະວິດນີ້ບໍ່ເຂົ້າກັນໄດ້ກັບ -e, -w, -x ແລະ -u.
--ຕົວພິມນ້ອຍໃຫຍ່ບໍ່ອ່ອນໄຫວ
ສະຕຣິງທັງໝົດແມ່ນຕົວພິມນ້ອຍ ຫຼື ບໍ່ອ່ອນໄຫວ, ດັ່ງນັ້ນທັງໝົດ "-expressions ຖືກປະຕິບັດໃນແບບດຽວກັນ
'-ສະແດງອອກ.
--case-ປີ້ນ
ປີ້ນຄວາມໝາຍຂອງສະຕຣິງທີ່ຍົກມາແບບດຽວ ແລະຄູ່. ດ້ວຍການປ່ຽນອັນດຽວນີ້
ວົງຢືມມີຄວາມອ່ອນໄຫວຕໍ່ກັບຕົວພິມນ້ອຍໃຫຍ່ ແລະ ວົງຢືມຄູ່ແມ່ນບໍ່ມີຕົວພິມນ້ອຍໃດໆ.
--no-generation-date
ສະກັດກັ້ນຜົນຜະລິດວັນທີໃນໄຟລ໌ທີ່ສ້າງຂຶ້ນ.
--no-generation-date
ສະກັດກັ້ນຜົນຜະລິດສະບັບໃນໄຟລ໌ທີ່ສ້າງຂຶ້ນ.
--ການເຂົ້າລະຫັດ-ນະໂຍບາຍ POLICY
ລະບຸວິທີການ re2c ຕ້ອງປະຕິບັດກັບຕົວແທນຂອງ Unicode. POLICY ສາມາດເປັນຫນຶ່ງໃນດັ່ງຕໍ່ໄປນີ້:
ບໍ່ (ການເອົາລູກອອກທີ່ມີຄວາມຜິດພາດໃນເວລາທີ່ຕົວແທນໄດ້ພົບເຫັນ), ທົດແທນ (ແທນທີ່ງຽບໆ
ຕົວແທນດ້ວຍຈຸດລະຫັດຂໍ້ຜິດພາດ 0xFFFD), ບໍ່ສົນໃຈ (ໃຫ້ການປິ່ນປົວຕົວແທນເປັນລະຫັດປົກກະຕິ
ຈຸດ). ໂດຍຄ່າເລີ່ມຕົ້ນ re2c ignores surrogates (ສໍາລັບການເຂົ້າກັນໄດ້ກັບຄືນໄປບ່ອນ). Unicode
ມາດຕະຖານກ່າວວ່າຕົວແທນຕົວແທນດຽວແມ່ນຈຸດລະຫັດທີ່ບໍ່ຖືກຕ້ອງ, ແຕ່ແຕກຕ່າງກັນ
ຫ້ອງສະຫມຸດແລະໂຄງການປະຕິບັດໃຫ້ເຂົາເຈົ້າແຕກຕ່າງກັນ.
--ການປ້ອນຂໍ້ມູນ ປັດໄຈນໍາເຂົ້າ
ລະບຸ re2c input API. ປັດໄຈນໍາເຂົ້າ ສາມາດເປັນຫນຶ່ງໃນດັ່ງຕໍ່ໄປນີ້: Default, custom.
-S --ໂຄງກະດູກ
ແທນທີ່ຈະຝັງລະຫັດ re2c-generated ເຂົ້າໄປໃນແຫຼ່ງ C/C++, ສ້າງ a
ໂຄງການທີ່ບັນຈຸດ້ວຍຕົນເອງສໍາລັບ DFA ດຽວກັນ. ທີ່ເປັນປະໂຫຍດທີ່ສຸດສໍາລັບຄວາມຖືກຕ້ອງແລະ
ການທົດສອບປະສິດທິພາບ.
--ຊັ້ນເປົ່າ POLICY
ຈະເຮັດແນວໃດຖ້າຜູ້ໃຊ້ປ້ອນຫ້ອງຮຽນຕົວອັກສອນເປົ່າ. POLICY ສາມາດເປັນຫນຶ່ງໃນ
ຕໍ່ໄປນີ້: ຫວ່າງເປົ່າ (ຈັບຄູ່ການປ້ອນຂໍ້ມູນຫວ່າງເປົ່າ: ບໍ່ສົມເຫດສົມຜົນຫຼາຍ, ແຕ່ນີ້ແມ່ນ
ຄ່າເລີ່ມຕົ້ນສຳລັບເຫດຜົນຄວາມເຂົ້າກັນໄດ້ກັບຫຼັງ), ບໍ່ກົງກັນ (ບໍ່ກົງກັນກັບອັນໃດນຶ່ງ
ປ້ອນ), ຄວາມຜິດພາດ (ການລວບລວມຄວາມຜິດພາດ). ໃຫ້ສັງເກດວ່າມີວິທີການຕ່າງໆໃນການກໍ່ສ້າງ
ຫ້ອງຮຽນຫວ່າງເປົ່າ, ເຊັ່ນ: [], [^\x00-\xFF], [\x00-\xFF][\x00-\xFF].
--dfa-minimization <ຕາຕະລາງ | Moore>
ສູດການຄິດໄລ່ພາຍໃນທີ່ໃຊ້ໂດຍ re2c ເພື່ອຫຼຸດ DFA (ຄ່າເລີ່ມຕົ້ນເປັນ moore). ຕາຕະລາງທັງສອງ
ການຕື່ມ ແລະ algorithms ຂອງ Moore ຄວນຜະລິດ DFA ຄືກັນ (ຂຶ້ນກັບລັດ
relabelling). ສູດການຕື່ມຕາຕະລາງແມ່ນງ່າຍດາຍຫຼາຍແລະຊ້າກວ່າ; ມັນເຮັດຫນ້າທີ່ເປັນ
ການປະຕິບັດກະສານອ້າງອີງ.
-1 --single-pass
ເຊົາສະໜັບສະໜຸນແລ້ວ ແລະບໍ່ໄດ້ເຮັດຫຍັງເລີຍ (ບັດດຽວແມ່ນເປັນຄ່າເລີ່ມຕົ້ນດຽວນີ້).
-W ເປີດການເຕືອນໄພທັງໝົດ.
- ຄວາມຜິດພາດ
ປ່ຽນຄຳເຕືອນໃຫ້ເປັນຄວາມຜິດພາດ. ກະລຸນາຮັບຊາບວ່າຕົວເລືອກນີ້ບໍ່ໄດ້ເປີດອັນໃດ
ການເຕືອນໄພ, ມັນມີຜົນກະທົບພຽງແຕ່ການເຕືອນໄພທີ່ໄດ້ເປີດມາເຖິງຕອນນັ້ນຫຼືຈະເປັນ
ເປີດໃນພາຍຫຼັງ.
-ວ
ເປີດໃຊ້ບຸກຄົນ ການເຕືອນໄພ.
-Wno-
ປິດບຸກຄົນ ການເຕືອນໄພ.
- ຄວາມຜິດພາດ
ເປີດໃຊ້ບຸກຄົນ ການເຕືອນໄພ ແລະຖືວ່າມັນເປັນຄວາມຜິດພາດ (ອັນນີ້ໝາຍເຖິງ -ວ).
- ຄວາມຜິດພາດ Wno-
ຢ່າປິ່ນປົວໂດຍສະເພາະນີ້ ການເຕືອນໄພ ເປັນຄວາມຜິດພາດ. ອັນນີ້ບໍ່ໄດ້ປິດການເຕືອນ
ຕົວເອງ
-Wcondition-order
ເຕືອນຖ້າຫາກວ່າໂຄງການທີ່ສ້າງຂຶ້ນເຮັດໃຫ້ສົມມຸດຕິຖານ implicit ກ່ຽວກັບເລກເງື່ອນໄຂ.
ຫນຶ່ງຄວນໃຊ້ບໍ່ວ່າຈະ -t, --type-header ທາງເລືອກຫຼື /*!types:re2c*/ ທິດທາງ
ສ້າງແຜນທີ່ຂອງຊື່ເງື່ອນໄຂກັບຕົວເລກແລະນໍາໃຊ້ເງື່ອນໄຂທີ່ສ້າງຂຶ້ນອັດຕະໂນມັດ
ຊື່.
-Wempty-character-class
ເຕືອນຖ້າຫາກວ່າການສະແດງອອກປົກກະຕິມີຫ້ອງຮຽນຕົວອັກສອນເປົ່າ. ຈາກຈຸດສົມເຫດສົມຜົນ
ທັດສະນະຄະຕິທີ່ພະຍາຍາມຈັບຄູ່ຕົວອັກສອນທີ່ເປົ່າຫວ່າງບໍ່ມີຄວາມຫມາຍ: ມັນຄວນຈະສະເຫມີ
ລົ້ມເຫລວ. ຢ່າງໃດກໍຕາມ, ສໍາລັບເຫດຜົນຄວາມເຂົ້າກັນໄດ້ໃນດ້ານຫລັງ re2c ອະນຸຍາດໃຫ້ຕົວອັກສອນເປົ່າ
ຫ້ອງຮຽນແລະປະຕິບັດມັນເປັນ string ຫວ່າງເປົ່າ. ໃຊ້ --ຊັ້ນເປົ່າ ທາງເລືອກທີ່ຈະປ່ຽນຄ່າເລີ່ມຕົ້ນ
ພຶດຕິ ກຳ.
-Wmatch-empty-string
ເຕືອນຖ້າການສະແດງອອກປົກກະຕິໃນກົດລະບຽບເປັນ nullable (ກົງກັບສະຕຣິງຫວ່າງເປົ່າ). ຖ້າ DFA
ແລ່ນຢູ່ໃນວົງຮອບແລະການຈັບຄູ່ຫວ່າງເປົ່າແມ່ນບໍ່ໄດ້ຕັ້ງໃຈ (ຕໍາແຫນ່ງ input ໃນບໍ່ກ້າວຫນ້າທາງດ້ານ
ດ້ວຍຕົນເອງ), lexer ອາດຈະໄດ້ຮັບການຕິດຢູ່ໃນ loop ນິລັນດອນ.
-Wswapped-range
ເຕືອນ ຖ້າ ຂອບ ເຂດ ຂອບ ເຂດ ລຸ່ມ ແມ່ນ ຫຼາຍ ກວ່າ ຂອບ ເຂດ ເທິງ. ຄ່າເລີ່ມຕົ້ນ re2c ພຶດຕິກໍາແມ່ນເພື່ອ
ແລກປ່ຽນຂອບເຂດຂອບເຂດຢ່າງງຽບໆ.
-Wundefined-control-flow
ເຕືອນຖ້າສາຍການປ້ອນຂໍ້ມູນບາງອັນເຮັດໃຫ້ເກີດການໄຫຼຂອງການຄວບຄຸມທີ່ບໍ່ໄດ້ກໍານົດໄວ້ໃນ lexer (ຄວາມຜິດພາດ
ຮູບແບບການລາຍງານ). ນີ້ແມ່ນຄວາມຜິດພາດອັນຕະລາຍທີ່ສຸດແລະທົ່ວໄປ. ມັນສາມາດເປັນ
ແກ້ໄຂໄດ້ງ່າຍໂດຍການເພີ່ມກົດລະບຽບເລີ່ມຕົ້ນ * (ກົດລະບຽບນີ້ມີບູລິມະສິດຕໍ່າສຸດ, ກົງກັນ
ຫົວໜ່ວຍລະຫັດໃດນຶ່ງ ແລະໃຊ້ຫົວຫນ່ວຍລະຫັດດຽວ).
-Wuseless-ຫນີ
ເຕືອນຖ້າສັນຍາລັກຖືກຫລົບຫນີໃນເວລາທີ່ມັນບໍ່ຄວນເປັນ. ໂດຍຄ່າເລີ່ມຕົ້ນ re2c ຈະບໍ່ສົນໃຈຢ່າງງຽບໆ
ການຫລົບຫນີ, ແຕ່ນີ້ອາດຈະຊີ້ໃຫ້ເຫັນເຖິງການພິມຜິດຫຼືຄວາມຜິດພາດໃນລໍາດັບຫນີ.
INTERFACE CODE
ຜູ້ໃຊ້ຕ້ອງສະຫນອງລະຫັດການໂຕ້ຕອບທັງໃນຮູບແບບຂອງລະຫັດ C/C++ (ມະຫາໂຄ, ຫນ້າທີ່,
ຕົວແປ, ແລະອື່ນໆ) ຫຼືໃນຮູບແບບຂອງ ໃນສະຖານທີ່ ກອງປະຊຸມ. ສັນຍາລັກໃດຕ້ອງໄດ້ຮັບການກໍານົດ
ແລະອັນໃດເປັນທາງເລືອກແມ່ນຂຶ້ນກັບກໍລະນີທີ່ໃຊ້ໂດຍສະເພາະ.
YYCONDTYPE
In -c ຮູບແບບທີ່ທ່ານສາມາດນໍາໃຊ້ -t ເພື່ອສ້າງໄຟລ໌ທີ່ປະກອບດ້ວຍການນັບຈໍານວນທີ່ໃຊ້ເປັນ
ເງື່ອນໄຂ. ແຕ່ລະຄ່າຫມາຍເຖິງເງື່ອນໄຂຂອງກົດລະບຽບທີ່ກໍານົດໄວ້.
YYCTXMARKER
l-ມູນຄ່າຂອງປະເພດ YYCTYPE *. ລະຫັດທີ່ສ້າງຂຶ້ນຈະບັນທຶກການຕິດຕາມສະພາບການຕາມຫຼັງ
ຂໍ້ມູນໃນ YYCTXMARKER. ຜູ້ໃຊ້ພຽງແຕ່ຕ້ອງການກໍານົດ macro ນີ້ຖ້າເຄື່ອງສະແກນ
ຂໍ້ມູນສະເພາະໃຊ້ບໍລິບົດຕໍ່ທ້າຍໃນໜຶ່ງ ຫຼືຫຼາຍກວ່າການສະແດງອອກປົກກະຕິຂອງມັນ.
YYCTYPE
ປະເພດທີ່ໃຊ້ເພື່ອຖືສັນຍາລັກປ້ອນຂໍ້ມູນ (ຫົວໜ່ວຍລະຫັດ). ປົກກະຕິແລ້ວ char or ລົງນາມ char ສໍາລັບການ
ASCII, EBCDIC ແລະ UTF-8, ລົງນາມ ສັ້ນ ສໍາລັບ UTF-16 ຫຼື UCS-2 ແລະ ລົງນາມ int ສໍາລັບການ
UTF-32.
YYCURSOR
l-ມູນຄ່າຂອງປະເພດ YYCTYPE * ທີ່ຊີ້ໃຫ້ເຫັນເຖິງສັນຍາລັກການປ້ອນຂໍ້ມູນໃນປະຈຸບັນ. ສ້າງຂຶ້ນ
ຄວາມກ້າວຫນ້າຂອງລະຫັດ YYCURSOR ດັ່ງທີ່ສັນຍາລັກຖືກຈັບຄູ່. ໃນການເຂົ້າ, YYCURSOR ແມ່ນສົມມຸດວ່າ
ຊີ້ໃຫ້ເຫັນເຖິງລັກສະນະທໍາອິດຂອງ token ໃນປັດຈຸບັນ. ຢູ່ທາງອອກ, YYCURSOR ຈະຊີ້ໃຫ້ເຫັນ
ລັກສະນະທໍາອິດຂອງ token ຕໍ່ໄປນີ້.
YYDEBUG (ລັດ, ປັດຈຸບັນ)
ນີ້ແມ່ນຈໍາເປັນພຽງແຕ່ຖ້າຫາກວ່າ -d ທຸງຖືກລະບຸ. ມັນອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອແກ້ໄຂໄດ້ຢ່າງງ່າຍດາຍ
parser ສ້າງໂດຍການໂທຫາຫນ້າທີ່ກໍານົດຂອງຜູ້ໃຊ້ສໍາລັບທຸກໆລັດ. ຫນ້າທີ່
ຄວນມີລາຍເຊັນຕໍ່ໄປນີ້: void YYDEBUG (int ລັດ, char ປັດຈຸບັນ). ໄດ້
ຕົວກໍານົດການທໍາອິດໄດ້ຮັບລັດຫຼື -1 ແລະຕົວກໍານົດການທີສອງໄດ້ຮັບ
ການປ້ອນຂໍ້ມູນໃສ່ຕົວກະພິບປັດຈຸບັນ.
YYFILL (n)
ລະຫັດທີ່ສ້າງຂຶ້ນ "ໂທ" YYFILL (n) ໃນເວລາທີ່ buffer ຕ້ອງການ (re) ຕື່ມ: ຢ່າງຫນ້ອຍ
n ຄວນໃຫ້ຕົວອັກສອນເພີ່ມເຕີມ. YYFILL (n) ຄວນປັບ YYCURSOR,
YYLIMIT, YYMARKER ແລະ YYCTXMARKER ຕາມຄວາມຕ້ອງການ. ໃຫ້ສັງເກດວ່າສໍາລັບການຂຽນໂປລແກລມປົກກະຕິ
ພາສາ n ຈະເປັນຄວາມຍາວຂອງຄໍາທີ່ຍາວທີ່ສຸດບວກຫນຶ່ງ. ຜູ້ໃຊ້ສາມາດວາງ
ຄໍາເຫັນຂອງແບບຟອມ /*!max:re2c*/ ໃສ່ YYMAXFILL ຄໍານິຍາມທີ່ຖືກກໍານົດເປັນ
ຄ່າຄວາມຍາວສູງສຸດ.
YYGETCONDITION ()
ຄໍານິຍາມນີ້ຖືກນໍາໃຊ້ເພື່ອໃຫ້ໄດ້ເງື່ອນໄຂກ່ອນທີ່ຈະໃສ່ລະຫັດເຄື່ອງສະແກນເມື່ອ
ການນໍາໃຊ້ -c ສະຫຼັບ. ມູນຄ່າຕ້ອງຖືກເລີ່ມຕົ້ນດ້ວຍຄ່າຈາກການນັບ
YYCONDTYPE ປະເພດ
YYGETSTATE ()
ຜູ້ໃຊ້ພຽງແຕ່ຕ້ອງການກໍານົດ macro ນີ້ຖ້າຫາກວ່າ -f ທຸງຖືກລະບຸ. ໃນນັ້ນ
ກໍລະນີ, ລະຫັດທີ່ສ້າງຂຶ້ນ "ໂທ" YYGETSTATE () ໃນຕອນເລີ່ມຕົ້ນຂອງເຄື່ອງສະແກນ
ເພື່ອໃຫ້ໄດ້ລັດທີ່ບັນທຶກໄວ້. YYGETSTATE () ຕ້ອງສົ່ງຄ່າຈຳນວນເຕັມທີ່ລົງລາຍເຊັນ. ໄດ້
ຄ່າຈະຕ້ອງເປັນ -1, ສະແດງໃຫ້ເຫັນວ່າເຄື່ອງສະແກນຖືກໃສ່ເປັນຄັ້ງທໍາອິດ,
ຫຼືຄ່າທີ່ບັນທຶກໄວ້ໃນເມື່ອກ່ອນໂດຍ YYSETSTATE (s). ໃນກໍລະນີທີສອງ, ເຄື່ອງສະແກນຈະ
ສືບຕໍ່ການດໍາເນີນງານທັນທີຫຼັງຈາກບ່ອນສຸດທ້າຍ YYFILL (n) ຖືກເອີ້ນ.
YYLIMIT
ການສະແດງອອກຂອງປະເພດ YYCTYPE * ນັ້ນໝາຍເຖິງຈຸດສິ້ນສຸດຂອງ buffer YYLIMIT[-1] ເປັນ
ຕົວອັກສອນສຸດທ້າຍໃນ buffer). ລະຫັດທີ່ສ້າງຂຶ້ນຊໍ້າໆແລ້ວປຽບທຽບ YYCURSOR to
YYLIMIT ເພື່ອກໍານົດເວລາທີ່ buffer ຕ້ອງການ (re)ຕື່ມ.
YYMARKER
l-ມູນຄ່າຂອງປະເພດ YYCTYPE *. ລະຫັດທີ່ສ້າງຂຶ້ນຈະຊ່ວຍປະຢັດຂໍ້ມູນ backtracking ໃນ
YYMARKER. ບາງເຄື່ອງສະແກນງ່າຍອາດຈະບໍ່ໃຊ້ອັນນີ້.
YYMAXFILL
ນີ້ຈະຖືກກໍານົດໂດຍອັດຕະໂນມັດໂດຍ /*!max:re2c*/ blocks ດັ່ງທີ່ອະທິບາຍຂ້າງເທິງ.
YYSETCONDITION (c)
ຄໍານິຍາມນີ້ຖືກນໍາໃຊ້ເພື່ອກໍານົດເງື່ອນໄຂໃນກົດລະບຽບການປ່ຽນແປງ. ນີ້ແມ່ນພຽງແຕ່ເປັນ
ໃຊ້ໃນເວລາທີ່ -c ມີການເຄື່ອນໄຫວແລະກົດລະບຽບການຫັນປ່ຽນແມ່ນຖືກນໍາໃຊ້.
YYSETSTATE (s)
ຜູ້ໃຊ້ພຽງແຕ່ຕ້ອງການກໍານົດ macro ນີ້ຖ້າຫາກວ່າ -f ທຸງຖືກລະບຸ. ໃນນັ້ນ
ກໍລະນີ, ລະຫັດທີ່ສ້າງຂຶ້ນ "ໂທ" YYSETSTATE ກ່ອນຈະໂທຫາ YYFILL (n). ໄດ້
ພາລາມິເຕີເຖິງ YYSETSTATE ແມ່ນຈຳນວນເຕັມທີ່ລົງລາຍເຊັນທີ່ລະບຸສະເພາະສະເພາະ
ຕົວຢ່າງຂອງ YYFILL (n) ທີ່ກໍາລັງຈະຖືກເອີ້ນວ່າ. ຜູ້ໃຊ້ຕ້ອງການບັນທຶກ
ສະຖານະຂອງເຄື່ອງສະແກນແລະມີ YYFILL (n) ກັບຄືນໄປຫາຜູ້ໂທ, ທັງຫມົດທີ່ລາວຕ້ອງເຮັດແມ່ນ
ເກັບຮັກສາຕົວລະບຸທີ່ເປັນເອກະລັກນັ້ນໄວ້ໃນຕົວແປ. ຕໍ່ມາ, ເມື່ອສະແກນຖືກເອີ້ນ
ອີກເທື່ອຫນຶ່ງ, ມັນຈະໂທຫາ YYGETSTATE () ແລະສືບຕໍ່ການປະຕິບັດທັນທີທີ່ມັນປະໄວ້. ໄດ້
ລະຫັດທີ່ສ້າງຂຶ້ນຈະມີທັງສອງ YYSETSTATE (s) ແລະ YYGETSTATE ເຖິງແມ່ນວ່າ YYFILL (n)
ກໍາລັງຖືກປິດການໃຊ້ງານ.
SYNTAX
ລະຫັດສໍາລັບ re2c ປະກອບດ້ວຍຊຸດຂອງ ກົດລະບຽບ, ຊື່ DEFINITIONS ແລະ ໃນສະຖານທີ່ ກອງປະຊຸມ.
ກົດລະບຽບ
ກົດລະບຽບປະກອບດ້ວຍການສະແດງອອກເປັນປົກກະຕິ (ເບິ່ງ REGULAR ການສະແດງອອກ) ພ້ອມກັບຕັນຂອງ
ລະຫັດ C/C++ ທີ່ຈະດໍາເນີນການໃນເວລາທີ່ການສະແດງອອກປົກກະຕິທີ່ກ່ຽວຂ້ອງຖືກຈັບຄູ່. ເຈົ້າ
ສາມາດເລີ່ມລະຫັດດ້ວຍການເປີດ curly brace ຫຼືລໍາດັບ :=. ເມື່ອລະຫັດ
ຫຼັງຈາກນັ້ນ, ມີເຊືອກຜູກ curly re2c ນັບຄວາມເລິກຂອງວົງເລັບ ແລະຢຸດຊອກຫາລະຫັດ
ອັດຕະໂນມັດ. ຖ້າບໍ່ດັ່ງນັ້ນ, ວົງເລັບ curly ແມ່ນບໍ່ໄດ້ຮັບອະນຸຍາດແລະ re2c ຢຸດຊອກຫາລະຫັດຢູ່
ແຖວທຳອິດທີ່ບໍ່ເລີ່ມຕົ້ນດ້ວຍຊ່ອງຫວ່າງ. ຖ້າຫາກວ່າກົດລະບຽບສອງຫຼືຫຼາຍກ່ໍາທັບຊ້ອນ, ໄດ້
ກົດລະບຽບທໍາອິດແມ່ນມັກ.
ການສະແດງອອກເປັນປົກກະຕິ { C / C ++ ລະຫັດ }
ການສະແດງອອກເປັນປົກກະຕິ := C / C ++ ລະຫັດ
ມີກົດລະບຽບພິເສດອັນຫນຶ່ງ: ກົດລະບຽບເລີ່ມຕົ້ນ *
* { C / C ++ ລະຫັດ }
* := C / C ++ ລະຫັດ
ໃຫ້ສັງເກດວ່າກົດລະບຽບເລີ່ມຕົ້ນ * ແຕກຕ່າງຈາກ [^]: ກົດລະບຽບເລີ່ມຕົ້ນມີບູລິມະສິດຕໍ່າສຸດ, ກົງກັນ
ຫນ່ວຍລະຫັດໃດໆ (ບໍ່ວ່າຈະຖືກຕ້ອງຫຼືບໍ່ຖືກຕ້ອງ) ແລະສະເຫມີກິນຫນຶ່ງຕົວອັກສອນ; ໃນຂະນະທີ່ [^]
ກົງກັບຈຸດລະຫັດທີ່ຖືກຕ້ອງ (ບໍ່ແມ່ນຫົວໜ່ວຍລະຫັດ) ແລະສາມາດກິນໄດ້ຫຼາຍຫົວໜ່ວຍລະຫັດ. ໃນຄວາມເປັນຈິງ,
ເມື່ອການເຂົ້າລະຫັດຄວາມຍາວຕົວແປໄດ້ຖືກນໍາໃຊ້, * ເປັນວິທີດຽວທີ່ເປັນໄປໄດ້ເພື່ອຈັບຄູ່ການປ້ອນຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງ
ລັກສະນະ (ເບິ່ງ ການເຂົ້າລະຫັດ ສໍາລັບລາຍລະອຽດ).
If -c ແມ່ນການເຄື່ອນໄຫວຫຼັງຈາກນັ້ນແຕ່ລະການສະແດງຜົນປົກກະຕິແມ່ນນໍາຫນ້າໂດຍບັນຊີລາຍຊື່ຂອງເຄື່ອງໝາຍຈຸດທີ່ແຍກອອກ
ຊື່ເງື່ອນໄຂ. ນອກຈາກກົດລະບຽບການຕັ້ງຊື່ປົກກະຕິ, ຍັງມີສອງກໍລະນີພິເສດ: <*> (ກົດລະບຽບດັ່ງກ່າວ
ຖືກລວມເຂົ້າກັບທຸກເງື່ອນໄຂ) ແລະ <> (ກົດລະບຽບດັ່ງກ່າວບໍ່ສາມາດມີປົກກະຕິທີ່ກ່ຽວຂ້ອງ
ການສະແດງອອກ, ລະຫັດຂອງມັນຖືກລວມເຂົ້າກັບການປະຕິບັດທັງຫມົດ). ກົດລະບຽບທີ່ບໍ່ແມ່ນຫວ່າງເປົ່າອາດຈະລະບຸຕື່ມອີກ
ເງື່ອນໄຂໃຫມ່. ໃນກໍລະນີນັ້ນ re2c ຈະສ້າງລະຫັດທີ່ຈໍາເປັນເພື່ອປ່ຽນ
ສະພາບອັດຕະໂນມັດ. ກົດລະບຽບສາມາດນໍາໃຊ້ :=> ເປັນທາງລັດເພື່ອສ້າງລະຫັດອັດຕະໂນມັດ
ທີ່ບໍ່ພຽງແຕ່ກໍານົດສະຖານະເງື່ອນໄຂໃຫມ່, ແຕ່ຍັງສືບຕໍ່ປະຕິບັດກັບໃຫມ່
ລັດ. ກົດລະບຽບທາງລັດບໍ່ຄວນຖືກນໍາໃຊ້ໃນ loop ທີ່ມີລະຫັດລະຫວ່າງການເລີ່ມຕົ້ນ
ຂອງ loop ແລະ re2c ບລັອກເວັ້ນເສຍແຕ່ re2c:cond:goto ຖືກປ່ຽນເປັນ ດໍາເນີນການຕໍ່. ຖ້າລະຫັດແມ່ນ
ມີຄວາມຈໍາເປັນກ່ອນກົດລະບຽບທັງຫມົດ (ເຖິງແມ່ນວ່າບໍ່ແມ່ນການໂດດງ່າຍດາຍ) ທ່ານສາມາດ doso ໂດຍໃຊ້
ກົດລະບຽບ pseudo.
ການສະແດງອອກເປັນປົກກະຕິ { C / C ++ ລະຫັດ }
ການສະແດງອອກເປັນປົກກະຕິ := C / C ++ ລະຫັດ
* { C / C ++ ລະຫັດ }
* := C / C ++ ລະຫັດ
ການສະແດງອອກເປັນປົກກະຕິ => ສະພາບ { C / C ++ ລະຫັດ }
ການສະແດງອອກເປັນປົກກະຕິ => ສະພາບ := C / C ++ ລະຫັດ
* => ສະພາບ { C / C ++ ລະຫັດ }
* => ສະພາບ := C / C ++ ລະຫັດ
ການສະແດງອອກເປັນປົກກະຕິ :=> ສະພາບ
<*> ການສະແດງອອກເປັນປົກກະຕິ { C / C ++ ລະຫັດ }
<*> ການສະແດງອອກເປັນປົກກະຕິ := C / C ++ ລະຫັດ
<*> * { C / C ++ ລະຫັດ }
<*> * := C / C ++ ລະຫັດ
<*> ການສະແດງອອກເປັນປົກກະຕິ => ສະພາບ { C / C ++ ລະຫັດ }
<*> ການສະແດງອອກເປັນປົກກະຕິ => ສະພາບ := C / C ++ ລະຫັດ
<*> * => ສະພາບ { C / C ++ ລະຫັດ }
<*> * => ສະພາບ := C / C ++ ລະຫັດ
<*> ການສະແດງອອກເປັນປົກກະຕິ :=> ສະພາບ
<> { C / C ++ ລະຫັດ }
<> := C / C ++ ລະຫັດ
<> => ສະພາບ { C / C ++ ລະຫັດ }
<> => ສະພາບ := C / C ++ ລະຫັດ
<> :=> ສະພາບ
<> :=> ສະພາບ
<! ລາຍຊື່ເງື່ອນໄຂ> { C / C ++ ລະຫັດ }
<! ລາຍຊື່ເງື່ອນໄຂ> := C / C ++ ລະຫັດ
{ C / C ++ ລະຫັດ }
:= C / C ++ ລະຫັດ
ຊື່ DEFINITIONS
ຄໍານິຍາມທີ່ມີຊື່ແມ່ນຮູບແບບ:
ຊື່ = ການສະແດງອອກເປັນປົກກະຕິ;
If -F ມີການເຄື່ອນໄຫວ, ຫຼັງຈາກນັ້ນຄໍານິຍາມທີ່ມີຊື່ຍັງມີຮູບແບບ:
ຊື່ { ການສະແດງອອກເປັນປົກກະຕິ }
ໃນສະຖານທີ່ ກອງປະຊຸມ
re2c:condprefix = yyc;
ອະນຸຍາດໃຫ້ຫນຶ່ງລະບຸຄໍານໍາຫນ້າທີ່ໃຊ້ສໍາລັບປ້າຍເງື່ອນໄຂ. ນັ້ນແມ່ນຂໍ້ຄວາມນີ້ແມ່ນ
prepended ກັບປ້າຍເງື່ອນໄຂໃດໆໃນໄຟລ໌ຜົນຜະລິດທີ່ສ້າງຂຶ້ນ.
re2c: condenumprefix = yyc;
ອະນຸຍາດໃຫ້ຫນຶ່ງລະບຸຄໍານໍາຫນ້າທີ່ໃຊ້ສໍາລັບຄ່າເງື່ອນໄຂ. ນັ້ນແມ່ນຂໍ້ຄວາມນີ້ແມ່ນ
prepended ກັບຄ່າ enum ເງື່ອນໄຂໃດໆໃນໄຟລ໌ຜົນຜະລິດທີ່ສ້າງຂຶ້ນ.
re2c:cond:divider = /* *********************************** */ ;
ອະນຸຍາດໃຫ້ຜູ້ຫນຶ່ງເພື່ອປັບແຕ່ງ devider ສໍາລັບການຕັນເງື່ອນໄຂ. ທ່ານສາມາດນໍາໃຊ້ @@ ເພື່ອເຮັດໃຫ້ການ
ຊື່ຂອງເງື່ອນໄຂຫຼືປັບແຕ່ງຕົວຍຶດໂດຍໃຊ້ re2c:cond:divider@cond.
re2c:cond:divider@cond = @@;
ລະບຸຕົວຍຶດທີ່ຈະຖືກແທນທີ່ດ້ວຍຊື່ເງື່ອນໄຂໃນ
re2c:cond:divider.
re2c:cond:goto = goto @@; ;
ອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອປັບແຕ່ງເງື່ອນໄຂ goto statements ທີ່ໃຊ້ກັບ :=> ກົດລະບຽບຮູບແບບ.
ທ່ານສາມາດໃຊ້ @@ ເພື່ອໃສ່ຊື່ຂອງເງື່ອນໄຂຫຼືປັບຕົວຍຶດສະຖານທີ່ໂດຍໃຊ້
re2c:cond:goto@cond. ນອກນັ້ນທ່ານຍັງສາມາດປ່ຽນເປັນ ສືບຕໍ່;, ຊຶ່ງຈະອະນຸຍາດໃຫ້ທ່ານ
ເພື່ອສືບຕໍ່ຮອບວຽນຖັດໄປລວມທັງລະຫັດໃດໆລະຫວ່າງ loop start ແລະ re2c
block.
re2c:cond:goto@cond = @@;
ລະບຸຕົວຍຶດທີ່ຈະຖືກແທນທີ່ດ້ວຍປ້າຍເງື່ອນໄຂໃນ
re2c:cond:goto.
re2c:indent:ເທິງ = 0;
ລະບຸຈໍານວນຕໍາ່ສຸດທີ່ຂອງຫຍໍ້ໜ້າທີ່ຈະໃຊ້. ຕ້ອງການຄ່າຕົວເລກ
ໃຫຍ່ກວ່າ ຫຼືເທົ່າກັບສູນ.
re2c:indent:string = \t ;
ລະບຸສະຕຣິງທີ່ຈະໃຊ້ສໍາລັບການຫຍໍ້ໜ້າ. ຕ້ອງການສະຕຣິງທີ່ຄວນມີ
ຊ່ອງຫວ່າງເທົ່ານັ້ນເວັ້ນເສຍແຕ່ວ່າທ່ານຕ້ອງການອັນນີ້ສໍາລັບເຄື່ອງມືພາຍນອກ. ວິທີທີ່ງ່າຍທີ່ສຸດທີ່ຈະລະບຸ
ຊ່ອງຫວ່າງແມ່ນເພື່ອລວມພວກມັນຢູ່ໃນວົງຢືມດຽວຫຼືຄູ່. ຖ້າທ່ານບໍ່ຕ້ອງການໃດໆ
indentation ທັງຫມົດທ່ານພຽງແຕ່ສາມາດຕັ້ງນີ້ເປັນ "".
re2c:yych:ການແປງ = 0;
ເມື່ອການຕັ້ງຄ່ານີ້ບໍ່ແມ່ນສູນ, ຈາກນັ້ນ re2c ສ້າງລະຫັດແປງອັດຕະໂນມັດ
ທຸກຄັ້ງທີ່ yych ໄດ້ອ່ານ. ໃນກໍລະນີນີ້, ປະເພດຕ້ອງໄດ້ຮັບການກໍານົດໂດຍໃຊ້
re2c:define:YYCTYPE.
re2c:yych:emit = 1;
ລຸ້ນຂອງ ych ສາມາດໄດ້ຮັບການສະກັດກັ້ນໂດຍການຕັ້ງຄ່ານີ້ເປັນ 0.
re2c:yybm:hex = 0;
ຖ້າຕັ້ງເປັນສູນ, ຕາຕະລາງທົດສະນິຍົມຈະຖືກໃຊ້ອີກ, ຕາຕະລາງເລກຖານສິບຫົກຈະເປັນ
ສ້າງຂຶ້ນ.
re2c:yyfill:ເປີດໃຊ້ = 1;
ຕັ້ງຄ່ານີ້ເປັນສູນເພື່ອສະກັດກັ້ນການຜະລິດ YYFILL (n). ໃນເວລາທີ່ການນໍາໃຊ້ນີ້ໃຫ້ແນ່ໃຈວ່າ
ກວດສອບວ່າເຄື່ອງສະແກນທີ່ສ້າງຂຶ້ນບໍ່ໄດ້ອ່ານຢູ່ເບື້ອງຫຼັງການປ້ອນຂໍ້ມູນ. ອະນຸຍາດໃຫ້ນີ້
ພຶດຕິກຳອາດຈະແນະນຳບັນຫາຄວາມປອດໄພໃຫ້ກັບບັນດາໂຄງການຂອງທ່ານ.
re2c:yyfill:ກວດເບິ່ງ = 1;
ນີ້ສາມາດຖືກຕັ້ງຄ່າ 0 ເພື່ອສະກັດກັ້ນຜົນຜະລິດຂອງເງື່ອນໄຂກ່ອນການນໍາໃຊ້ YYCURSOR ແລະ
YYLIMIT ເຊິ່ງກາຍເປັນປະໂຫຍດເມື່ອ YYLIMIT + YYMAXFILL ແມ່ນສາມາດເຂົ້າເຖິງໄດ້ຕະຫຼອດເວລາ.
re2c:define:YYFILL = YYFILL ;
ການທົດແທນສໍາລັບ YYFILL. ໃຫ້ສັງເກດວ່າໂດຍຄ່າເລີ່ມຕົ້ນ re2c ສ້າງການໂຕ້ຖຽງໃນວົງເລັບແລະ
semicolon ຫຼັງຈາກ YYFILL. ຖ້າທ່ານຕ້ອງການເຮັດ YYFILL ຄໍາຖະແຫຼງທີ່ arbitrary ແທນທີ່ຈະ
ກ່ວາການໂທ, ກໍານົດ re2c:define:YYFILL:naked ໄປຫາບໍ່ແມ່ນສູນ ແລະໃຊ້
re2c:define:YYFILL@len ເພື່ອຊີ້ໃຫ້ເຫັນຕົວກໍານົດການຢ່າງເປັນທາງການພາຍໃນຂອງ YYFILL ຮ່າງກາຍ
re2c:define:YYFILL@len = @@ ;
ການປະກົດຕົວຂອງຂໍ້ຄວາມນີ້ພາຍໃນຂອງ YYFILL ຈະຖືກແທນທີ່ດ້ວຍຕົວຈິງ
ການໂຕ້ຖຽງ.
re2c:yyfill:ພາລາມິເຕີ = 1;
ຄວບຄຸມການໂຕ້ຖຽງໃນວົງເລັບຫຼັງຈາກ YYFILL. ຖ້າສູນ, ການຂັດແຍ້ງຈະຖືກລະເວັ້ນ. ຖ້າ
ບໍ່ແມ່ນສູນ, argument ແມ່ນສ້າງຂຶ້ນເວັ້ນເສຍແຕ່ re2c:define:YYFILL:naked ຖືກຕັ້ງເປັນບໍ່ແມ່ນສູນ.
re2c:define:YYFILL:naked = 0;
ຄວບຄຸມການໂຕ້ຖຽງໃນວົງເລັບ ແລະເຄື່ອງໝາຍຈຸດຫຼັງ YYFILL. ຖ້າສູນ, ທັງຄວາມຂັດແຍ້ງ ແລະ
semicolon ຖືກລະເວັ້ນ. ຖ້າບໍ່ແມ່ນສູນ, argument ຈະຖືກສ້າງຂຶ້ນເວັ້ນເສຍແຕ່
re2c:yyfill:ພາລາມິເຕີ ຖືກຕັ້ງເປັນສູນ ແລະ semicolon ແມ່ນຖືກສ້າງຂຶ້ນໂດຍບໍ່ມີເງື່ອນໄຂ.
re2c:startlabel = 0;
ຖ້າຕັ້ງເປັນຈຳນວນບໍ່ເປັນສູນ, ປ້າຍກຳກັບເລີ່ມຕົ້ນຂອງບລ໋ອກເຄື່ອງສະແກນຄັ້ງຕໍ່ໄປຈະ
ຖືກສ້າງຂື້ນເຖິງແມ່ນວ່າບໍ່ໄດ້ໃຊ້ໂດຍເຄື່ອງສະແກນຕົວມັນເອງ. ຖ້າບໍ່ດັ່ງນັ້ນປົກກະຕິ yy0 ຄື
ປ້າຍເລີ່ມຕົ້ນແມ່ນຖືກສ້າງຂຶ້ນພຽງແຕ່ຖ້າຈໍາເປັນ. ຖ້າຕັ້ງເປັນຄ່າຂໍ້ຄວາມແລ້ວປ້າຍຊື່
ດ້ວຍຂໍ້ຄວາມນັ້ນຈະຖືກສ້າງຂື້ນໂດຍບໍ່ຄໍານຶງເຖິງວ່າປ້າຍເລີ່ມຕົ້ນປົກກະຕິແມ່ນ
ຖືກນໍາໃຊ້ຫຼືບໍ່. ການຕັ້ງຄ່ານີ້ຈະຖືກຣີເຊັດເປັນ 0 ຫຼັງຈາກປ້າຍກຳກັບເລີ່ມຕົ້ນແລ້ວ
ສ້າງຂຶ້ນ.
re2c:labelprefix = yy ;
ອະນຸຍາດໃຫ້ຄົນຫນຶ່ງປ່ຽນຄໍານໍາຫນ້າຂອງປ້າຍຕົວເລກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ yy ແລະສາມາດເປັນ
ຕັ້ງສະຕຣິງໃດນຶ່ງທີ່ເປັນປ້າຍຊື່ທີ່ຖືກຕ້ອງ.
re2c:state:abort = 0;
ໃນເວລາທີ່ບໍ່ແມ່ນສູນແລະສະຫຼັບ -f ແມ່ນການເຄື່ອນໄຫວຫຼັງຈາກນັ້ນ YYGETSTATE block ຈະມີ a
ກໍລະນີເລີ່ມຕົ້ນທີ່ເອົາລູກອອກແລະກໍລະນີ -1 ຖືກນໍາໃຊ້ສໍາລັບການເລີ່ມຕົ້ນ.
re2c:state:nextlabel = 0;
ໃຊ້ເມື່ອ -f ມີການເຄື່ອນໄຫວເພື່ອຄວບຄຸມບໍ່ວ່າຈະເປັນ YYGETSTATE block ແມ່ນຕິດຕາມດ້ວຍ a
yyຕໍ່ໄປ: ປ້າຍຊື່. ແທນທີ່ຈະໃຊ້ yyNext ປົກກະຕິແລ້ວເຈົ້າຍັງສາມາດໃຊ້ການຕັ້ງຄ່າໄດ້
ປ້າຍເລີ່ມຕົ້ນ ເພື່ອບັງຄັບປ້າຍເລີ່ມຕົ້ນສະເພາະ ຫຼືຄ່າເລີ່ມຕົ້ນ yy0 ເປັນປ້າຍເລີ່ມຕົ້ນ.
ແທນທີ່ຈະໃຊ້ປ້າຍສະເພາະ, ມັນມັກຈະດີກວ່າທີ່ຈະແຍກອອກ YYGETSTATE
ລະຫັດຈາກລະຫັດເຄື່ອງສະແກນຕົວຈິງໂດຍການວາງ a /*!getstate:re2c*/ ຄຳ ເຫັນ.
re2c:cgoto:threshold = 9;
ເມື່ອໃດ -g ເຮັດວຽກຢູ່ ຄ່ານີ້ລະບຸຂອບເຂດຄວາມຊັບຊ້ອນທີ່ເຮັດໃຫ້ເກີດ
ການສ້າງຕາຕະລາງເຕັ້ນໄປຫາແທນທີ່ຈະໃຊ້ nested if's ແລະການຕັດສິນໃຈ bitfields. ໄດ້
threshold ແມ່ນສົມທຽບກັບການຄາດຄະເນການຄິດໄລ່ຂອງ if-s ທີ່ຈໍາເປັນໃນທຸກ
bitmap ທີ່ໃຊ້ແລ້ວແບ່ງຂອບເຂດດ້ວຍ 2.
re2c:yych:ການແປງ = 0;
ເມື່ອການປ້ອນຂໍ້ມູນການນໍາໃຊ້ຕົວອັກສອນເຊັນແລະ -s or -b ສະວິດແມ່ນມີຜົນບັງຄັບໃຊ້ re2c
ອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອປ່ຽນອັດຕະໂນມັດເປັນປະເພດຕົວອັກສອນທີ່ບໍ່ມີການລົງນາມທີ່ເປັນຫຼັງຈາກນັ້ນ
ມີຄວາມຈໍາເປັນສໍາລັບລັກສະນະດຽວພາຍໃນຂອງມັນ. ເມື່ອການຕັ້ງຄ່ານີ້ເປັນສູນ ຫຼືຫວ່າງເປົ່າ
string ການແປງຖືກປິດໃຊ້ງານ. ການນໍາໃຊ້ຕົວເລກທີ່ບໍ່ແມ່ນສູນການປ່ຽນແປງແມ່ນໄດ້ຮັບການ
ຈາກ YYCTYPE. ຖ້າສິ່ງນັ້ນຖືກມອບໃຫ້ໂດຍການຕັ້ງຄ່າ inplace ມູນຄ່ານັ້ນແມ່ນເປັນ
ໃຊ້. ຖ້າບໍ່ດັ່ງນັ້ນມັນຈະເປັນ (YYCTYPE) ແລະການປ່ຽນແປງການຕັ້ງຄ່ານັ້ນແມ່ນບໍ່ມີ
ເປັນໄປໄດ້ຕໍ່ໄປອີກແລ້ວ. ເມື່ອການຕັ້ງຄ່ານີ້ເປັນສະຕຣິງ, ວົງເລັບຕ້ອງຖືກລະບຸ. ດຽວນີ້
ສົມມຸດວ່າຂໍ້ມູນຂອງທ່ານແມ່ນ a char * buffer ແລະທ່ານກໍາລັງໃຊ້ສະຫວິດທີ່ໄດ້ກ່າວມາຂ້າງເທິງ
ທ່ານສາມາດກໍານົດ YYCTYPE to ລົງນາມ char ແລະການຕັ້ງຄ່ານີ້ເປັນ 1 ຫຼື (ບໍ່ໄດ້ເຊັນ
char).
re2c:define:YYCONDTYPE = YYCONDTYPE ;
Enumeration ໃຊ້ສໍາລັບການສະຫນັບສະຫນູນເງື່ອນໄຂກັບ -c mode
re2c:define:YYCTXMARKER = YYCTXMARKER ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບກໍານົດ YYCTXMARKER ແລະດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນມັນໂດຍການຕັ້ງຄ່າ
ຄ່າກັບລະຫັດຕົວຈິງທີ່ຕ້ອງການ.
re2c:define:YYCTYPE = YYCTYPE ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບກໍານົດ YYCTYPE ແລະດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນມັນໂດຍການຕັ້ງຄ່າ
ຄ່າກັບລະຫັດຕົວຈິງທີ່ຕ້ອງການ.
re2c:define:YYCURSOR = YYCURSOR ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບກໍານົດ YYCURSOR ແລະດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນມັນໂດຍການຕັ້ງຄ່າ
ຄ່າກັບລະຫັດຕົວຈິງທີ່ຕ້ອງການ.
re2c:define:YYDEBUG = YYDEBUG ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບກໍານົດ YYDEBUG ແລະດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນມັນໂດຍການຕັ້ງຄ່າ
ຄ່າກັບລະຫັດຕົວຈິງທີ່ຕ້ອງການ.
re2c:define:YYGETCONDITION = YYGETCONDITION ;
ການທົດແທນສໍາລັບ YYGETCONDITION. ໃຫ້ສັງເກດວ່າໂດຍຄ່າເລີ່ມຕົ້ນ re2c ສ້າງວົງເລັບຫຼັງຈາກ
YYGETCONDITION. ຕັ້ງ re2c:define:YYGETCONDITION:naked ຫາບໍ່ແມ່ນສູນເພື່ອຍົກເລີກວົງເລັບ.
re2c:define:YYGETCONDITION:naked = 0;
ຄວບຄຸມວົງເລັບຫຼັງ YYGETCONDITION. ຖ້າສູນ, ວົງເລັບຖືກລະເວັ້ນ. ຖ້າບໍ່ແມ່ນສູນ,
ວົງເລັບຖືກສ້າງຂື້ນ.
re2c:define:YYSETCONDITION = YYSETCONDITION ;
ການທົດແທນສໍາລັບ YYSETCONDITION. ໃຫ້ສັງເກດວ່າໂດຍຄ່າເລີ່ມຕົ້ນ re2c ສ້າງການໂຕ້ຖຽງໃນ
braces ແລະ semicolon ຫຼັງຈາກ YYSETCONDITION. ຖ້າທ່ານຕ້ອງການເຮັດ YYSETCONDITION an
ຄໍາຖະແຫຼງທີ່ arbitrary ແທນທີ່ຈະເປັນການໂທ, ກໍານົດ re2c:define:YYSETCONDITION:naked to
ບໍ່ແມ່ນສູນ ແລະໃຊ້ re2c:define:YYSETCONDITION@cond ເພື່ອຊີ້ໃຫ້ເຫັນຕົວກໍານົດການຢ່າງເປັນທາງການພາຍໃນ
of YYSETCONDITION ຮ່າງກາຍ
re2c:define:YYSETCONDITION@cond = @@ ;
ການປະກົດຕົວຂອງຂໍ້ຄວາມນີ້ພາຍໃນຂອງ YYSETCONDITION ຈະຖືກແທນທີ່ດ້ວຍ
ການໂຕ້ຖຽງຕົວຈິງ.
re2c:define:YYSETCONDITION:naked = 0;
ຄວບຄຸມການໂຕ້ຖຽງໃນວົງເລັບ ແລະເຄື່ອງໝາຍຈຸດຫຼັງ YYSETCONDITION. ຖ້າສູນ, ທັງສອງ
agrument ແລະ semicolon ຖືກລະເວັ້ນ. ຖ້າບໍ່ແມ່ນສູນ, ທັງ argument ແລະ semicolon ແມ່ນ
ສ້າງຂຶ້ນ.
re2c:define:YYGETSTATE = YYGETSTATE ;
ການທົດແທນສໍາລັບ YYGETSTATE. ໃຫ້ສັງເກດວ່າໂດຍຄ່າເລີ່ມຕົ້ນ re2c ສ້າງວົງເລັບຫຼັງຈາກ
YYGETSTATE. ຕັ້ງ re2c:define:YYGETSTATE:naked ຫາບໍ່ແມ່ນສູນເພື່ອຍົກເລີກວົງເລັບ.
re2c:define:YYGETSTATE:naked = 0;
ຄວບຄຸມວົງເລັບຫຼັງ YYGETSTATE. ຖ້າສູນ, ວົງເລັບຖືກລະເວັ້ນ. ຖ້າບໍ່ແມ່ນສູນ, ວົງເລັບ
ຖືກສ້າງຂື້ນ.
re2c:define:YYSETSTATE = YYSETSTATE ;
ການທົດແທນສໍາລັບ YYSETSTATE. ໃຫ້ສັງເກດວ່າໂດຍຄ່າເລີ່ມຕົ້ນ re2c ສ້າງການໂຕ້ຖຽງໃນວົງເລັບ
ແລະ semicolon ຫຼັງຈາກ YYSETSTATE. ຖ້າທ່ານຕ້ອງການເຮັດ YYSETSTATE ຕົນເອງມັກ
ຖະແຫຼງການແທນທີ່ຈະເປັນການໂທ, ຕັ້ງ re2c:define:YYSETSTATE:naked ໄປຫາບໍ່ແມ່ນສູນ ແລະໃຊ້
re2c:define:YYSETSTATE@cond ເພື່ອຊີ້ໃຫ້ເຫັນຕົວກໍານົດການຢ່າງເປັນທາງການພາຍໃນຂອງ YYSETSTATE ຮ່າງກາຍ
re2c:define:YYSETSTATE@state = @@ ;
ການປະກົດຕົວຂອງຂໍ້ຄວາມນີ້ພາຍໃນຂອງ YYSETSTATE ຈະຖືກແທນທີ່ດ້ວຍຕົວຈິງ
ການໂຕ້ຖຽງ.
re2c:define:YYSETSTATE:naked = 0;
ຄວບຄຸມການໂຕ້ຖຽງໃນວົງເລັບ ແລະເຄື່ອງໝາຍຈຸດຫຼັງ YYSETSTATE. ຖ້າສູນ, ທັງສອງຂໍ້ຂັດແຍ້ງ
ແລະ semicolon ຖືກລະເວັ້ນ. ຖ້າບໍ່ແມ່ນສູນ, ທັງ argument ແລະ semicolon ຈະຖືກສ້າງຂຶ້ນ.
re2c:define:YYLIMIT = YYLIMIT ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບກໍານົດ YYLIMIT ແລະດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນມັນໂດຍການຕັ້ງຄ່າ
ຄ່າກັບລະຫັດຕົວຈິງທີ່ຕ້ອງການ.
re2c:define:YYMARKER = YYMARKER ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບກໍານົດ YYMARKER ແລະດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນມັນໂດຍການຕັ້ງຄ່າ
ຄ່າກັບລະຫັດຕົວຈິງທີ່ຕ້ອງການ.
re2c:label:yyFillLabel = yyFillLabel ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບຊື່ຂອງປ້າຍຊື່ yyFillLabel.
re2c:label:yyNext = yyNext ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບຊື່ຂອງປ້າຍຊື່ yyNext.
re2c:variable:yyaccept = yyaccept;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບຊື່ຂອງຕົວແປ ຍອມຮັບ.
re2c:variable:yybm = yybm ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບຊື່ຂອງຕົວແປ yybm.
re2c:variable:yych = ych ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບຊື່ຂອງຕົວແປ ych.
re2c:variable:yyctable = yctable ;
ເມື່ອທັງສອງ -c ແລະ -g ມີການເຄື່ອນໄຫວແລ້ວ re2c ໃຊ້ຕົວແປນີ້ເພື່ອສ້າງສະຖິດ
ເຕັ້ນໄປຫາຕາຕະລາງສໍາລັບ YYGETCONDITION.
re2c:variable:yystable = yystable ;
ເຊົາສະໜັບສະໜູນ.
re2c:variable:yytarget = ເປົ້າໝາຍ yy ;
ອະນຸຍາດໃຫ້ຫນຶ່ງຂຽນທັບຊື່ຂອງຕົວແປ ເປົ້າໝາຍ yy.
REGULAR ການສະແດງອອກ
"ຟູ" ສາຍອັກສອນ "ຟູ". ລໍາດັບການຫລົບຫນີ ANSI-C ສາມາດຖືກນໍາໃຊ້.
'ຟູ' ສາຍອັກສອນ "ຟູ" (ຕົວອັກສອນ [a-zA-Z] ປະຕິບັດຕໍ່ກໍລະນີທີ່ບໍ່ອ່ອນໄຫວ). ANSI-C ຫນີ
ລໍາດັບສາມາດນໍາໃຊ້ໄດ້.
[xyz] ຫ້ອງຮຽນລັກສະນະ; ໃນກໍລະນີນີ້, ການສະແດງອອກປົກກະຕິແມ່ນກົງກັນ x, y, ຫຼື z.
[abj-oZ]
ຫ້ອງຮຽນຕົວອັກສອນທີ່ມີລະດັບໃນມັນ; ການແຂ່ງຂັນ a, b, ຈົດໝາຍຈາກ j ໂດຍຜ່ານການ o or Z.
[^ຫ້ອງຮຽນ]
ຫ້ອງຮຽນຕົວອັກສອນປີ້ນ.
r \ s ກົງກັບໃດ r ເຊິ່ງບໍ່ແມ່ນ s. r ແລະ s ຕ້ອງເປັນການສະແດງອອກເປັນປົກກະຕິເຊິ່ງສາມາດເປັນ
ສະແດງອອກເປັນຫ້ອງຮຽນລັກສະນະ.
r* ສູນ ຫຼືຫຼາຍກວ່າການປະກົດຕົວຂອງ r.
r+ ຫນຶ່ງຫຼືຫຼາຍກວ່າການປະກົດຕົວຂອງ r.
r? ທາງເລືອກ r.
(r) r; ວົງເລັບຖືກໃຊ້ເພື່ອລົບລ້າງຄວາມສຳຄັນກ່ອນໜ້າ.
r s r ປະຕິບັດຕາມໂດຍ s (concatenation).
r | s ບໍ່ວ່າຈະເປັນ r or s (ທາງເລືອກ).
r / s r ແຕ່ພຽງແຕ່ຖ້າມັນຖືກປະຕິບັດຕາມ s. ໃຫ້ສັງເກດວ່າ s ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງຂໍ້ຄວາມທີ່ກົງກັນ.
ປະເພດຂອງການສະແດງອອກປົກກະຕິນີ້ເອີ້ນວ່າ "ສະພາບການຕິດຕາມ". ສະພາບການຕາມຫຼັງສາມາດ
ພຽງແຕ່ເປັນການສິ້ນສຸດຂອງກົດລະບຽບແລະບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງຄໍານິຍາມທີ່ມີຊື່.
r{n} ກົງກັນ r ຢ່າງແນ່ນອນ n ເວລາ.
r{n,} ກົງກັນ r ຢ່າງຫນ້ອຍ n ເວລາ.
r{n,m} ກົງກັນ r ຢ່າງຫນ້ອຍ n ເທື່ອ, ແຕ່ບໍ່ເກີນ m ເວລາ.
. ກົງກັບຕົວອັກສອນໃດນຶ່ງ ຍົກເວັ້ນແຖວໃໝ່.
ຊື່ ກົງກັບຄໍານິຍາມທີ່ມີຊື່ຕາມທີ່ລະບຸໄວ້ໂດຍ ຊື່ ພຽງແຕ່ຖ້າວ່າ -F ປິດ. ຖ້າ -F ມີການເຄື່ອນໄຫວ
ຫຼັງຈາກນັ້ນ, ນີ້ປະຕິບັດຄືກັບວ່າມັນຖືກຫຸ້ມຢູ່ໃນວົງຢືມສອງເທົ່າແລະກົງກັບສະຕຣິງ
"ຊື່".
ຫ້ອງຮຽນຕົວອັກສອນ ແລະຕົວໜັງສືສະຕຣິງອາດມີຕົວອັກສອນແປດ ຫຼືເລກຖານສິບຫົກ
ຄໍານິຍາມແລະຊຸດຕໍ່ໄປນີ້ຂອງລໍາດັບການຫລົບຫນີ: \a, \b, \f, \n, \r, \t, \v, \\. ເປັນ
ຕົວອັກສອນແປດແມ່ນຖືກກໍານົດໂດຍ backslash ຕິດຕາມດ້ວຍຕົວເລກສາມສິບແປດຂອງມັນ (ຕົວຢ່າງ \ 377).
ຕົວອັກສອນເລກຖານສິບຫົກຈາກ 0 ຫາ 0xFF ແມ່ນຖືກກໍານົດໂດຍ backslash, ເປັນຕົວພິມນ້ອຍ x ແລະສອງ
ຕົວເລກເລກຖານສິບຫົກ (ຕົວຢ່າງ \x12). ຕົວອັກສອນເລກຖານສິບຫົກຈາກ 0x100 ຫາ 0xFFFF ແມ່ນຖືກກໍານົດໂດຍ
backslash, ເປັນຕົວພິມນ້ອຍ \u ຫຼືຕົວພິມໃຫຍ່ \X ແລະສີ່ຕົວເລກຖານສິບຫົກ (ຕົວຢ່າງ
\ u1234). ຕົວອັກສອນເລກຖານສິບຫົກຈາກ 0x10000 ຫາ 0xFFFFffff ແມ່ນຖືກກໍານົດໂດຍ backslash, ເປັນ
ໂຕພິມໃຫຍ່ \U ແລະແປດຕົວເລກຖານສິບຫົກ (ຕົວຢ່າງ \U12345678).
ກົດລະບຽບ "ໃດກໍ່ຕາມ" ແບບເຄື່ອນທີ່ແມ່ນກົດລະບຽບເລີ່ມຕົ້ນ *.
ເຄື່ອງສະແກນ ກັບ ເກັບຮັກສາໄດ້ ລັດ
ໃນເວລາທີ່ -f ທຸງແມ່ນໄດ້ລະບຸໄວ້, re2c ສ້າງເຄື່ອງສະແກນທີ່ສາມາດເກັບຮັກສາສະຖານະປະຈຸບັນຂອງມັນ,
ກັບຄືນໄປຫາຜູ້ໂທ, ແລະຕໍ່ມາສືບຕໍ່ດໍາເນີນການກັບບ່ອນທີ່ມັນປະໄວ້.
ການດໍາເນີນງານເລີ່ມຕົ້ນຂອງ re2c ແມ່ນຮູບແບບ "ດຶງ", ບ່ອນທີ່ເຄື່ອງສະແກນຮ້ອງຂໍໃຫ້ມີວັດສະດຸປ້ອນເພີ່ມເຕີມ
ທຸກຄັ້ງທີ່ມັນຕ້ອງການ. ຢ່າງໃດກໍຕາມ, ຮູບແບບການດໍາເນີນງານນີ້ສົມມຸດວ່າເຄື່ອງສະແກນແມ່ນ
"ເຈົ້າຂອງ" loop parsing, ແລະນັ້ນອາດຈະບໍ່ສະດວກສະເຫມີ.
ໂດຍປົກກະຕິ, ຖ້າມີ preprocessor ກ່ອນເຄື່ອງສະແກນຢູ່ໃນກະແສ, ຫຼືສໍາລັບນັ້ນ
ບໍ່ວ່າຈະເປັນແຫຼ່ງຂະບວນການອື່ນໆຂອງຂໍ້ມູນ, ເຄື່ອງສະແກນບໍ່ສາມາດ "ຮ້ອງຂໍ" ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມເວັ້ນເສຍແຕ່
ທັງເຄື່ອງສະແກນ ແລະແຫຼ່ງທີ່ມາຢູ່ໃນຫົວຂໍ້ແຍກຕ່າງຫາກ.
ໄດ້ -f ທຸງແມ່ນເປັນປະໂຫຍດສໍາລັບສະຖານະການນີ້: ມັນເຮັດໃຫ້ຜູ້ໃຊ້ອອກແບບເຄື່ອງສະແກນທີ່ເຮັດວຽກ
ຮູບແບບ "ຊຸກຍູ້", ie ບ່ອນທີ່ຂໍ້ມູນຖືກປ້ອນໃສ່ເຄື່ອງສະແກນໂດຍ chunk. ເມື່ອເຄື່ອງສະແກນ
ແລ່ນອອກຈາກຂໍ້ມູນທີ່ຈະບໍລິໂພກ, ມັນພຽງແຕ່ເກັບຮັກສາສະຖານະຂອງຕົນ, ແລະກັບຄືນໄປຫາຜູ້ໂທ. ເມື່ອຫຼາຍ
ຂໍ້ມູນການປ້ອນຂໍ້ມູນຖືກປ້ອນໃສ່ເຄື່ອງສະແກນ, ມັນສືບຕໍ່ການດຳເນີນການທີ່ມັນປະໄວ້.
ການປ່ຽນແປງທີ່ຈໍາເປັນເມື່ອທຽບກັບຮູບແບບ "ດຶງ":
· ຜູ້ໃຊ້ມີການສະຫນອງມະຫາພາກ YYSETSTATE () ແລະ YYGETSTATE (ລັດ).
·ທ -f ທາງເລືອກ inhibits ການປະກາດຂອງ ych ແລະ ຍອມຮັບ. ດັ່ງນັ້ນຜູ້ໃຊ້ຕ້ອງປະກາດ
ເຫຼົ່ານີ້. ຜູ້ໃຊ້ຍັງຕ້ອງບັນທຶກແລະຟື້ນຟູສິ່ງເຫຼົ່ານີ້. ໃນຕົວຢ່າງ
ຕົວຢ່າງ/push_model/push.re ເຫຼົ່ານີ້ຖືກປະກາດວ່າເປັນຂົງເຂດຂອງຊັ້ນຮຽນ (C ++) ເຊິ່ງ
ເຄື່ອງສະແກນແມ່ນວິທີການ, ດັ່ງນັ້ນພວກມັນບໍ່ຈໍາເປັນຕ້ອງຖືກບັນທຶກ / ຟື້ນຟູຢ່າງຈະແຈ້ງ. ສໍາລັບ C ພວກເຂົາ
ອາດຈະຖືກສ້າງເປັນມະຫາພາກທີ່ເລືອກຊ່ອງຂໍ້ມູນຈາກໂຄງສ້າງທີ່ສົ່ງຜ່ານເປັນພາລາມິເຕີ.
ອີກທາງເລືອກ, ພວກເຂົາສາມາດຖືກປະກາດເປັນຕົວແປທ້ອງຖິ່ນ, ບັນທຶກດ້ວຍ YYFILL (n) ໃນເວລາທີ່ມັນ
ຕັດສິນໃຈທີ່ຈະກັບຄືນມາແລະການຟື້ນຟູໃນການເຂົ້າໄປໃນຫນ້າທີ່. ນອກຈາກນີ້, ມັນອາດຈະມີຫຼາຍ
ປະສິດທິພາບທີ່ຈະຊ່ວຍປະຢັດລັດຈາກ YYFILL (n) ເນື່ອງຈາກວ່າ YYSETSTATE (ລັດ) ຖືກເອີ້ນວ່າ
ໂດຍບໍ່ມີເງື່ອນໄຂ. YYFILL (n) ແນວໃດກໍ່ຕາມບໍ່ໄດ້ຮັບ ລັດ ເປັນພາລາມິເຕີ, ດັ່ງນັ້ນພວກເຮົາຈະມີ
ເພື່ອເກັບຮັກສາສະຖານະຢູ່ໃນຕົວແປທ້ອງຖິ່ນໂດຍ YYSETSTATE (ລັດ).
· ປັບປຸງແກ້ໄຂ YYFILL (n) ເພື່ອກັບຄືນ (ຈາກຟັງຊັນເອີ້ນມັນ) ຖ້າຕ້ອງການການປ້ອນຂໍ້ມູນເພີ່ມເຕີມ.
· ແກ້ໄຂຜູ້ໂທເພື່ອຮັບຮູ້ວ່າຕ້ອງການການປ້ອນຂໍ້ມູນເພີ່ມເຕີມ ແລະຕອບສະໜອງຕາມຄວາມເໝາະສົມ.
· ລະຫັດທີ່ສ້າງຂຶ້ນຈະມີຕົວບລັອກສະວິດທີ່ໃຊ້ເພື່ອຟື້ນຟູສະຖານະສຸດທ້າຍ
ໂດຍການໂດດຫລັງ corrspoding ໄດ້ YYFILL (n) ໂທ. ລະຫັດນີ້ຖືກສ້າງໂດຍອັດຕະໂນມັດ
ໃນ epilog ຂອງຄັ້ງທໍາອິດ /*!re2c */ ຕັນ. ມັນເປັນໄປໄດ້ທີ່ຈະກະຕຸ້ນການຜະລິດຂອງ
YYGETSTATE () ສະກັດກ່ອນຫນ້າໂດຍການວາງ a /*!getstate:re2c*/ ຄໍາເຫັນ. ນີ້ແມ່ນໂດຍສະເພາະແມ່ນ
ເປັນປະໂຫຍດໃນເວລາທີ່ລະຫັດເຄື່ອງສະແກນຄວນຈະຖືກຫໍ່ຢູ່ໃນ loop.
ກະລຸນາເບິ່ງ ຕົວຢ່າງ/push_model/push.re ສໍາລັບເຄື່ອງສະແກນຕົວແບບ "ຍູ້". ລະຫັດທີ່ສ້າງຂຶ້ນສາມາດເປັນ
tweaked ໂດຍໃຊ້ inplace configurations ລັດ: ເອົາລູກອອກ ແລະ state: Nextlabel.
ເຄື່ອງສະແກນ ກັບ ເງື່ອນໄຂ ສະຫນັບສະຫນູນ
ທ່ານສາມາດນໍາຫນ້າການສະແດງອອກປົກກະຕິທີ່ມີບັນຊີລາຍຊື່ຂອງເງື່ອນໄຂໃນເວລາທີ່ການນໍາໃຊ້ -c
ສະຫຼັບ. ໃນກໍລະນີນີ້ re2c ສ້າງບລັອກເຄື່ອງສະແກນສໍາລັບແຕ່ລະເງື່ອນໄຂ. ບ່ອນທີ່ແຕ່ລະຄົນຂອງ
ຕັນທີ່ສ້າງຂຶ້ນມີ precondition ຂອງຕົນເອງ. precondition ແມ່ນໃຫ້ໂດຍການໂຕ້ຕອບ
ກໍານົດ YYGETCONDITON() ແລະຕ້ອງເປັນປະເພດ YYCONDTYPE.
ມີສອງປະເພດກົດລະບຽບພິເສດ. ຫນ້າທໍາອິດ, ກົດລະບຽບຂອງເງື່ອນໄຂ <*> ຖືກລວມເຂົ້າກັບທຸກຄົນ
ເງື່ອນໄຂ (ສັງເກດວ່າພວກເຂົາມີບູລິມະສິດຕ່ໍາກວ່າກົດລະບຽບອື່ນໆຂອງເງື່ອນໄຂນັ້ນ). ແລະ
ອັນທີສອງ, ບັນຊີລາຍຊື່ເງື່ອນໄຂທີ່ຫວ່າງເປົ່າອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອສະຫນອງບລັອກລະຫັດທີ່ບໍ່ມີ a
ສ່ວນເຄື່ອງສະແກນ. ຫມາຍຄວາມວ່າມັນບໍ່ອະນຸຍາດໃຫ້ສະແດງອອກເປັນປົກກະຕິ. ຄ່າເງື່ອນໄຂ
ໂດຍອ້າງອີງໃສ່ທ່ອນໄມ້ພິເສດນີ້ສະເໝີກັບຄ່າ enumeration 0. ດ້ວຍວິທີນີ້
ລະຫັດຂອງກົດລະບຽບພິເສດນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອເລີ່ມຕົ້ນເຄື່ອງສະແກນ. ມັນບໍ່ມີທາງ
ຈໍາເປັນຕ້ອງມີກົດລະບຽບເຫຼົ່ານີ້: ແຕ່ບາງຄັ້ງມັນກໍ່ເປັນປະໂຫຍດທີ່ຈະມີການອຸທິດຕົນ
ສະພາບສະພາບທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນ.
ກົດລະບຽບທີ່ບໍ່ແມ່ນຫວ່າງເປົ່າອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອກໍານົດເງື່ອນໄຂໃຫມ່, ເຊິ່ງເຮັດໃຫ້ພວກເຂົາກົດລະບຽບການປ່ຽນແປງ.
ນອກຈາກການສ້າງການໂທສໍາລັບການກໍານົດ YYSETCONDTITION ບໍ່ມີລະຫັດພິເສດອື່ນໆ
ສ້າງຂຶ້ນ.
ມີກົດລະບຽບພິເສດອີກປະເພດຫນຶ່ງທີ່ອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອ prepend ລະຫັດກັບລະຫັດໃດຫນຶ່ງ block ຂອງ
ກົດລະບຽບທັງຫມົດຂອງເງື່ອນໄຂສະເພາະໃດຫນຶ່ງຫຼືກັບຕັນລະຫັດທັງຫມົດກັບກົດລະບຽບທັງຫມົດ. ນີ້ສາມາດເປັນ
ເປັນປະໂຫຍດໃນເວລາທີ່ການປະຕິບັດບາງຢ່າງແມ່ນທົ່ວໄປໃນບັນດາກົດລະບຽບ. ສໍາລັບຕົວຢ່າງ, ນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອເກັບຮັກສາ
ຄວາມຍາວຂອງສາຍທີ່ສະແກນ. ກົດລະບຽບການຕັ້ງຄ່າພິເສດເຫຼົ່ານີ້ເລີ່ມຕົ້ນດ້ວຍເຄື່ອງຫມາຍ exclamation
ຕິດຕາມດ້ວຍບັນຊີລາຍຊື່ຂອງເງື່ອນໄຂ <! ເງື່ອນໄຂ, ... > ຫຼືດາວ ທີ່ຢູ່ ເມື່ອໃດ re2c
ສ້າງລະຫັດສໍາລັບກົດລະບຽບທີ່ລັດບໍ່ມີກົດລະບຽບການຕິດຕັ້ງແລະການຕັ້ງຄ່າ star'd
ກົດລະບຽບແມ່ນມີຢູ່, ກ່ວາລະຫັດທີ່ຈະຖືກນໍາໃຊ້ເປັນລະຫັດການຕັ້ງຄ່າ.
ການເຂົ້າລະຫັດ
re2c ຮອງຮັບການເຂົ້າລະຫັດຕໍ່ໄປນີ້: ASCII (ຄ່າເລີ່ມຕົ້ນ), EBCDIC (-e), UCS-2 (-w), UTF-16
(-x), UTF-32 (-u) ແລະ UTF-8 (-8). ເບິ່ງການຕັ້ງຄ່າ inplace ເຊັ່ນກັນ re2c: ທຸງ.
ແນວຄວາມຄິດຕໍ່ໄປນີ້ຄວນໄດ້ຮັບການຊີ້ແຈງໃນເວລາທີ່ເວົ້າກ່ຽວກັບການເຂົ້າລະຫັດ. ຈຸດລະຫັດແມ່ນເປັນ
ຕົວເລກທີ່ບໍ່ມີຕົວຕົນ, ເຊິ່ງສະແດງເຖິງສັນຍາລັກການເຂົ້າລະຫັດດຽວ. ຫົວໜ່ວຍລະຫັດແມ່ນຫົວໜ່ວຍນ້ອຍທີ່ສຸດ
ຂອງຫນ່ວຍຄວາມຈໍາ, ເຊິ່ງຖືກນໍາໃຊ້ໃນຂໍ້ຄວາມທີ່ເຂົ້າລະຫັດ (ມັນກົງກັນກັບຕົວອັກສອນດຽວໃນວັດສະດຸປ້ອນ
ກະແສ). ຫນ່ວຍລະຫັດຫນຶ່ງຫຼືຫຼາຍສາມາດຈໍາເປັນຕ້ອງເປັນຕົວແທນຂອງຈຸດລະຫັດດຽວ, ຂຶ້ນກັບ
ກ່ຽວກັບການເຂົ້າລະຫັດ. ໃນການເຂົ້າລະຫັດທີ່ມີຄວາມຍາວຄົງທີ່, ແຕ່ລະຈຸດລະຫັດແມ່ນສະແດງດ້ວຍຄວາມເທົ່າທຽມກັນ
ຈໍານວນຫົວຫນ່ວຍລະຫັດ. ໃນການເຂົ້າລະຫັດຄວາມຍາວຕົວແປ, ຈຸດລະຫັດທີ່ແຕກຕ່າງກັນສາມາດເປັນ
ເປັນຕົວແທນດ້ວຍຈໍານວນຫນ່ວຍລະຫັດທີ່ແຕກຕ່າງກັນ.
ASCII ແມ່ນການເຂົ້າລະຫັດທີ່ມີຄວາມຍາວຄົງທີ່. ພື້ນທີ່ລະຫັດຂອງມັນປະກອບມີຈຸດລະຫັດ 0x100, ຈາກ 0 ເຖິງ
0xFF. ຈຸດລະຫັດຫນຶ່ງແມ່ນສະແດງດ້ວຍຫົວຫນ່ວຍລະຫັດ 1-byte ແນ່ນອນ, ເຊິ່ງມີ
ຄ່າດຽວກັນກັບຈຸດລະຫັດ. ຂະຫນາດຂອງ YYCTYPE ຕ້ອງເປັນ 1 byte.
EBCDIC ແມ່ນການເຂົ້າລະຫັດທີ່ມີຄວາມຍາວຄົງທີ່. ພື້ນທີ່ລະຫັດຂອງມັນປະກອບມີຈຸດລະຫັດ 0x100, ຈາກ 0 ເຖິງ
0xFF. ຈຸດລະຫັດຫນຶ່ງແມ່ນສະແດງດ້ວຍຫົວຫນ່ວຍລະຫັດ 1-byte ແນ່ນອນ, ເຊິ່ງມີ
ຄ່າດຽວກັນກັບຈຸດລະຫັດ. ຂະຫນາດຂອງ YYCTYPE ຕ້ອງເປັນ 1 byte.
UCS-2 ແມ່ນການເຂົ້າລະຫັດທີ່ມີຄວາມຍາວຄົງທີ່. ພື້ນທີ່ລະຫັດຂອງມັນປະກອບມີຈຸດລະຫັດ 0x10000, ຈາກ 0 ເຖິງ
0xFFFF. ຈຸດລະຫັດຫນຶ່ງແມ່ນສະແດງດ້ວຍຫົວຫນ່ວຍລະຫັດ 2-byte ແນ່ນອນ, ເຊິ່ງມີ
ຄ່າດຽວກັນກັບຈຸດລະຫັດ. ຂະຫນາດຂອງ YYCTYPE ຕ້ອງເປັນ 2 bytes.
UTF-16 ແມ່ນການເຂົ້າລະຫັດຄວາມຍາວຕົວແປ. ພື້ນທີ່ລະຫັດຂອງມັນປະກອບມີຈຸດລະຫັດ Unicode ທັງຫມົດ,
ຈາກ 0 ຫາ 0xD7FF ແລະຈາກ 0xE000 ຫາ 0x10FFFF. ຈຸດລະຫັດຫນຶ່ງແມ່ນສະແດງດ້ວຍ
ໜຶ່ງ ຫຼືສອງຫົວໜ່ວຍລະຫັດ 2-byte. ຂະຫນາດຂອງ YYCTYPE ຕ້ອງເປັນ 2 bytes.
UTF-32 ແມ່ນການເຂົ້າລະຫັດທີ່ມີຄວາມຍາວຄົງທີ່. ພື້ນທີ່ລະຫັດຂອງມັນປະກອບມີຈຸດລະຫັດ Unicode ທັງໝົດ, ຈາກ 0
ເຖິງ 0xD7FF ແລະຈາກ 0xE000 ຫາ 0x10FFFF. ຈຸດລະຫັດຫນຶ່ງແມ່ນເປັນຕົວແທນຢ່າງແນ່ນອນ
ຫນຶ່ງຫນ່ວຍລະຫັດ 4-byte. ຂະຫນາດຂອງ YYCTYPE ຕ້ອງເປັນ 4 bytes.
UTF-8 ແມ່ນການເຂົ້າລະຫັດຄວາມຍາວຕົວແປ. ພື້ນທີ່ລະຫັດຂອງມັນປະກອບມີຈຸດລະຫັດ Unicode ທັງຫມົດ,
ຈາກ 0 ຫາ 0xD7FF ແລະຈາກ 0xE000 ຫາ 0x10FFFF. ຈຸດລະຫັດຫນຶ່ງແມ່ນສະແດງດ້ວຍ
ລໍາດັບຂອງຫນຶ່ງ, ສອງ, ສາມຫຼືສີ່ຫນ່ວຍລະຫັດ 1-byte. ຂະຫນາດຂອງ YYCTYPE ຕ້ອງເປັນ 1
ໄບຕ໌.
ໃນ Unicode, ຄ່າຈາກໄລຍະ 0xD800 ຫາ 0xDFFF (ຕົວແທນ) ບໍ່ແມ່ນລະຫັດ Unicode ທີ່ຖືກຕ້ອງ.
ຈຸດ, ລໍາດັບການເຂົ້າລະຫັດໃດໆຂອງຫົວຫນ່ວຍລະຫັດ, ທີ່ຈະແຜນທີ່ກັບຈຸດລະຫັດ Unicode ໃນ
ໄລຍະ 0xD800-0xDFFF, ບໍ່ຖືກຕ້ອງ. ຜູ້ໃຊ້ສາມາດຄວບຄຸມວິທີການ re2c ປິ່ນປົວພະຍາດດັ່ງກ່າວ
ລໍາດັບກັບ --ການເຂົ້າລະຫັດ-ນະໂຍບາຍ ທຸງ (ເບິ່ງ OPTIONS ສໍາລັບຄໍາອະທິບາຍຢ່າງເຕັມທີ່).
ສໍາລັບການເຂົ້າລະຫັດບາງອັນ, ມີຫົວໜ່ວຍລະຫັດ, ທີ່ບໍ່ເຄີຍເກີດຂຶ້ນໃນກະແສການເຂົ້າລະຫັດທີ່ຖືກຕ້ອງ (ເຊັ່ນ
0xFF byte ໃນ UTF-8). ຖ້າເຄື່ອງສະແກນທີ່ສ້າງຂຶ້ນຕ້ອງກວດສອບການປ້ອນຂໍ້ມູນທີ່ບໍ່ຖືກຕ້ອງ, ຄວາມຈິງເທົ່ານັ້ນ
ວິທີການເຮັດແນວນັ້ນແມ່ນໃຊ້ກົດລະບຽບເລີ່ມຕົ້ນ *. ຫມາຍເຫດ, ກົດລະບຽບເຕັມທີ່ [^] ຈະບໍ່ຈັບບໍ່ຖືກຕ້ອງ
ຫົວໜ່ວຍລະຫັດເມື່ອການເຂົ້າລະຫັດຄວາມຍາວຕົວແປຖືກໃຊ້ ([^] ຫມາຍຄວາມວ່າ "ຈຸດລະຫັດທີ່ຖືກຕ້ອງທັງຫມົດ", ໃນຂະນະທີ່
ກົດລະບຽບເລີ່ມຕົ້ນ * ຫມາຍຄວາມວ່າ "ທຸກຫນ່ວຍລະຫັດທີ່ເປັນໄປໄດ້").
ທົ່ວໄປ ປັດໄຈນໍາເຂົ້າ API
re2c ປົກກະຕິແລ້ວດໍາເນີນການກ່ຽວກັບການປ້ອນຂໍ້ມູນໂດຍໃຊ້ຈຸດເລີ່ມຕົ້ນຄ້າຍຄືຕົວຊີ້ YYCURSOR, YYMARKER,
YYCTXMARKER ແລະ YYLIMIT.
API ປ້ອນຂໍ້ມູນທົ່ວໄປ (ເປີດໃຊ້ດ້ວຍ --ການປ້ອນຂໍ້ມູນ custom switch) ອະນຸຍາດໃຫ້ຫນຶ່ງເພື່ອປັບແຕ່ງການປ້ອນຂໍ້ມູນ
ການດໍາເນີນງານ. ໃນຮູບແບບນີ້, re2c ຈະສະແດງອອກການດໍາເນີນງານທັງຫມົດກ່ຽວກັບການປ້ອນຂໍ້ມູນໃນເງື່ອນໄຂຂອງ
ເບື້ອງຕົ້ນຕໍ່ໄປນີ້:
┌──────────────────────────────────────────── ──┐
│YYPEEK () │ ເອົາຕົວປ້ອນຂໍ້ມູນປັດຈຸບັນ │
├─────────────────────────────────────────── ──┤
│YYSKIP () │ ເລື່ອນໄປຫາຕົວລະຄອນຕໍ່ໄປ │
├─────────────────────────────────────────── ──┤
│YYBACKUP () │ ຕຳແໜ່ງການປ້ອນຂໍ້ມູນປັດຈຸບັນສຳຮອງ │
├─────────────────────────────────────────── ──┤
│YYBACKUPCTX () │ ຕຳແໜ່ງການປ້ອນຂໍ້ມູນປັດຈຸບັນສຳຮອງ │
│ │ ສຳລັບການຕິດຕາມເນື້ອໃນ │
├─────────────────────────────────────────── ──┤
│YYRESTORE () │ ຟື້ນຟູຕຳແໜ່ງການປ້ອນຂໍ້ມູນປັດຈຸບັນ │
├─────────────────────────────────────────── ──┤
│YYRESTORECTX () │ ຟື້ນຟູຕຳແໜ່ງການປ້ອນຂໍ້ມູນປັດຈຸບັນ │
│ │ ສຳລັບການຕິດຕາມເນື້ອໃນ │
├─────────────────────────────────────────── ──┤
│YYLESSTHAN (n) │ ກວດເບິ່ງວ່າໜ້ອຍກວ່າ n ປ້ອນຂໍ້ມູນ │
│ │ ເຫຼືອຕົວອັກສອນ │
└──────────────────────────────────────────── ──┘
ສອງລິ້ງທີ່ເປັນປະໂຫຍດທີ່ໃຫ້ຕົວຢ່າງບາງອັນ:
1. http://skvadrik.github.io/aleph_null/posts/re2c/2015-01-13-input_model.html
2. http://skvadrik.github.io/aleph_null/posts/re2c/2015-01-15-input_model_custom.html
ໃຊ້ re2c ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net