ນີ້ແມ່ນຄໍາສັ່ງ flexml ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
flexml - ສ້າງໂປເຊດເຊີ XML ທີ່ຖືກຕ້ອງແລະຄໍາຮ້ອງສະຫມັກຈາກ DTD
ສະຫຼຸບສັງລວມ
flexml [-ASHDvdnLXV] [-sແບ່ງ] [-pມີຂົນ] [-iinit_header] [-uປະເພດ] [-rຮາກ] [-aຫຸ້ນ]
ຊື່[.dtd]
ລາຍລະອຽດ
Flexml reads ຊື່.dtd ເຊິ່ງຈະຕ້ອງເປັນ DTD (ຄໍານິຍາມປະເພດເອກະສານ) ທີ່ອະທິບາຍຮູບແບບ
ຂອງເອກະສານ XML (Extensible Markup Language) ແລະຜະລິດ XML "validating". processor
ມີການໂຕ້ຕອບເພື່ອສະຫນັບສະຫນູນ XML ຄໍາຮ້ອງສະຫມັກດ. ຄໍາຮ້ອງສະຫມັກທີ່ເຫມາະສົມສາມາດຖືກສ້າງຂື້ນ
ທາງ ເລືອກ ຈາກ "ໄຟລ ໌ ການ ປະ ຕິ ບັດ " ພິ ເສດ , ບໍ່ ວ່າ ຈະ ເປັນ ສໍາ ລັບ ການ ເຊື່ອມ ຕໍ່ ຫຼື ປະ ສົມ ປະ ສານ ຂອງ ຂໍ້ ຄວາມ ກັບ
ໂປເຊດເຊີ.
ໂປເຊດເຊີທີ່ສ້າງຂຶ້ນຈະກວດສອບເອກະສານທີ່ສອດຄ່ອງກັບ DTD ຢ່າງເຂັ້ມງວດເທົ່ານັ້ນ,
ໂດຍບໍ່ມີການ ການຂະຫຍາຍ it, ຫຼາຍທີ່ຊັດເຈນພວກເຮົາໃນການປະຕິບັດຈໍາກັດກົດລະບຽບ XML [28] ກັບ
[28r] doctypedecl ::= ' '
ບ່ອນທີ່ "ExternalId" ຫມາຍເຖິງ DTD ທີ່ໃຊ້. (ໃນຄວາມເປັນຈິງ, ຫນຶ່ງອາດຈະເວົ້າວ່າ flexml
ປະຕິບັດເຄື່ອງຫມາຍ "ບໍ່ສາມາດຂະຫຍາຍໄດ້". :)
ໂຮງງານຜະລິດທີ່ຜະລິດແມ່ນ a flex(1) ເຄື່ອງສະແກນ, ໂດຍຄ່າເລີ່ມຕົ້ນທີ່ມີຊື່ ຊື່.l ກັບທີ່ສອດຄ້ອງກັນ
ໄຟລ໌ຫົວ C ຊື່.h ສໍາລັບການລວບລວມແຍກຕ່າງຫາກຂອງຄໍາຮ້ອງສະຫມັກທີ່ສ້າງຂຶ້ນ. ທາງເລືອກ
flexml ໃຊ້ເວລາເປັນ ຫຸ້ນ ໄຟລ໌ທີ່ມີການປະຕິບັດຕໍ່ອົງປະກອບແລະຜະລິດໄຟລ໌ C ທີ່ມີອົງປະກອບ
ຟັງຊັນສໍາລັບຄໍາຮ້ອງສະຫມັກ XML ທີ່ມີຈຸດເຂົ້າທີ່ເອີ້ນວ່າຈາກໂປເຊດເຊີ XML (ມັນສາມາດເຮັດໄດ້
ຍັງພັບແອັບພລິເຄຊັນ XML ເຂົ້າໄປໃນໂປເຊດເຊີ XML ເພື່ອເຮັດໃຫ້ແອັບພລິເຄຊັນ XML ຢືນຢູ່ຄົນດຽວ
ແຕ່ນີ້ປ້ອງກັນການແບ່ງປັນໂປເຊດເຊີລະຫວ່າງແອັບພລິເຄຊັນ).
ໃນ "ຕົວເລືອກ" ພວກເຮົາບອກທາງເລືອກທີ່ເປັນໄປໄດ້, ໃນ "ຮູບແບບໄຟລ໌ການປະຕິບັດ" ພວກເຮົາອະທິບາຍວິທີການຂຽນ.
ຄໍາຮ້ອງສະຫມັກ, ໃນ "COMPILATION" ພວກເຮົາອະທິບາຍວິທີການລວບລວມໂປເຊດເຊີທີ່ຜະລິດແລະ
ຄໍາຮ້ອງສະຫມັກເຂົ້າໄປໃນການປະຕິບັດ, ແລະໃນ "BUGS" ພວກເຮົາບອກຂໍ້ຈໍາກັດໃນປະຈຸບັນຂອງລະບົບ
ກ່ອນທີ່ຈະໃຫ້ການອ້າງອິງມາດຕະຖານ.
OPTIONS
Flexml ເອົາທາງເລືອກຕໍ່ໄປນີ້.
-- ໂດດດ່ຽວ, -A
ສ້າງ ກ ຢືນຢູ່ຄົນດຽວ ຄໍາຮ້ອງສະຫມັກເຄື່ອງສະແກນ. ຖ້າລວມກັບ -aຫຸ້ນ ຈາກນັ້ນ
ຄໍາຮ້ອງສະຫມັກຈະມີຊື່ເປັນ ຫຸ້ນ ດ້ວຍການຂະຫຍາຍການທົດແທນໂດຍ .l, ຖ້າບໍ່ດັ່ງນັ້ນມັນ
ຈະຢູ່ໃນ ຊື່.l. ການຂັດແຍ້ງກັບ -S, -H, ແລະ -D.
--ການປະຕິບັດ ຫຸ້ນ, -a ຫຸ້ນ
ໃຊ້ ຫຸ້ນ ໄຟລ໌ເພື່ອຜະລິດຄໍາຮ້ອງສະຫມັກ XML ໃນໄຟລ໌ທີ່ມີຊື່ດຽວກັນກັບ
ຫຸ້ນ ຫຼັງຈາກປ່ຽນສ່ວນຂະຫຍາຍດ້ວຍ .c. ຖ້າລວມກັບ -A ຫຼັງຈາກນັ້ນ, ແທນທີ່ຈະ
ຄໍາຮ້ອງສະຫມັກ stand-alone ຈະປະກອບມີການປະຕິບັດຫນ້າທີ່.
-- dummy [app_name], -D [app_name]
ສ້າງຄໍາຮ້ອງສະຫມັກ dummy ທີ່ມີຫນ້າທີ່ຫວ່າງເປົ່າທີ່ຈະເອີ້ນໂດຍ XML
ໂຮງງານຜະລິດ. ຖ້າ app_name ບໍ່ໄດ້ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ, ມັນກໍານົດໄວ້ໃນຕອນຕົ້ນ
name-dummy.c. ຖ້າລວມກັບ -a ຫຸ້ນ ຫຼັງຈາກນັ້ນ, ຄໍາຮ້ອງສະຫມັກຈະໃສ່
ການກະທໍາທີ່ລະບຸໄວ້ແລະໄດ້ຮັບການຕັ້ງຊື່ເປັນ ຫຸ້ນ ດ້ວຍການຂະຫຍາຍການທົດແທນໂດຍ .c.
ການຂັດແຍ້ງກັບ -A; ບົ່ງບອກໂດຍ -a ເວັ້ນເສຍແຕ່ວ່າອັນໃດອັນໜຶ່ງ -SHD ຖືກກໍານົດ.
--debug, -d
ເປີດໂໝດດີບັກໃນເຄື່ອງສະແກນ flex ແລະພິມລາຍລະອຽດຂອງ DTD ອອກນຳ
ການວິເຄາະປະຕິບັດໂດຍ flexml.
--ຫົວ [header_name], -H [header_name]
ສ້າງໄຟລ໌ສ່ວນຫົວ. ຖ້າ header_name ບໍ່ໄດ້ລະບຸໄວ້ໃນເສັ້ນຄໍາສັ່ງ,
ເລີ່ມຕົ້ນເປັນ ຊື່.h. ການຂັດແຍ້ງກັບ -A; ຢູ່ໃນຄ່າເລີ່ມຕົ້ນຖ້າບໍ່ມີ -SHD ລະບຸ.
--lineno, -L
ເຮັດໃຫ້ໂປເຊດເຊີ XML (ຕາມທີ່ຜະລິດໂດຍ flex(1)) ນັບເສັ້ນໃນການປ້ອນຂໍ້ມູນແລະເກັບຮັກສາໄວ້
ມັນສາມາດໃຊ້ໄດ້ກັບການປະຕິບັດຄໍາຮ້ອງສະຫມັກ XML ໃນຈໍານວນ "yylineno". (ນີ້ແມ່ນປິດໂດຍ
ຄ່າເລີ່ມຕົ້ນເນື່ອງຈາກປະສິດທິພາບດ້ານເທິງແມ່ນສໍາຄັນ.)
--ງຽບ, -q
ປ້ອງກັນໂປເຊດເຊີ XML (ຕາມທີ່ຜະລິດໂດຍ flex(1)) ຈາກການລາຍງານຄວາມຜິດພາດທີ່ມັນດໍາເນີນການ
ເຂົ້າໄປໃນ stderr. ແທນທີ່ຈະ, ຜູ້ໃຊ້ຈະຕ້ອງລວມເອົາຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດກັບ
parse_err_msg() ຫນ້າທີ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຖືກຂຽນໄວ້ໃນ stderr.
-- ແລ່ນແຫ້ງ, -n
"Dry-run": ບໍ່ຜະລິດໄຟລ໌ຜົນຜະລິດໃດໆ.
--pubid ມີຂົນ, -p ມີຂົນ
ກຳນົດປະເພດເອກະສານເປັນ "ສາທາລະນະ" ດ້ວຍຕົວລະບຸ ມີຂົນ ແທນ "ລະບົບ",
ຄ່າເລີ່ມຕົ້ນ.
--init_header init_header, -i init_header
ວາງແຖວທີ່ມີ "#include "init_header" ໃນພາກສ່ວນ "%{...%}" ຢູ່ເທິງສຸດຂອງ
ໄຟລ໌ .l ທີ່ສ້າງຂຶ້ນ. ນີ້ອາດຈະເປັນປະໂຫຍດສໍາລັບການເຮັດໃຫ້ flex ຕ່າງໆ "#define", ສໍາລັບ
ຕົວຢ່າງ "YY_INPUT" ຫຼື "YY_DECL".
--sysid=sysid
ລົບລ້າງ "ລະບົບ" id ຂອງ DTD ທີ່ຍອມຮັບ. ບາງຄັ້ງເປັນປະໂຫຍດໃນເວລາທີ່ dtd ຂອງທ່ານແມ່ນ
ວາງໄວ້ໃນໄດເລກະທໍລີຍ່ອຍ.
--root-tags roottags, -r roottags
ຈໍາກັດໂປເຊດເຊີ XML ເພື່ອກວດສອບເອກະສານທີ່ມີຫນຶ່ງໃນອົງປະກອບຮາກເທົ່ານັ້ນ
ລະບຸໄວ້ໃນເຄື່ອງໝາຍຈຸດທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ roottags.
--ເຄື່ອງສະແກນ [scanner_name], -S [scanner_name]
ສ້າງເຄື່ອງສະແກນ. ຖ້າ scanner_name ບໍ່ໄດ້ຖືກມອບໃຫ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງ, ມັນກໍານົດໄວ້ໃນຕອນຕົ້ນ
ຊື່.l. ການຂັດແຍ້ງກັບ -A; ຢູ່ໃນຄ່າເລີ່ມຕົ້ນຖ້າບໍ່ມີ -SHD ລະບຸ.
--skel ແບ່ງ, -s ແບ່ງ
ໃຊ້ເຄື່ອງສະແກນໂຄງກະດູກ ແບ່ງ ແທນທີ່ຈະເປັນຄ່າເລີ່ມຕົ້ນ.
--act-bin flexml-act, -T flexml-act
ນີ້ແມ່ນທາງເລືອກພາຍໃນສ່ວນໃຫຍ່ແມ່ນການນໍາໃຊ້ເພື່ອທົດສອບສະບັບຂອງ flexml ທີ່ບໍ່ໄດ້ຕິດຕັ້ງເທື່ອ.
-- stack-increment stack_increment, -b stack_increment
ຕັ້ງ FLEXML_BUFFERSTACKSIZE ເປັນ stack_increment (100000 ຕາມຄ່າເລີ່ມຕົ້ນ). ການຄວບຄຸມນີ້
ແຕ່ລະ stack ຂໍ້ມູນເຕີບໂຕຫຼາຍປານໃດ realloc().
--tag-prefix ຄັກ, -O ຄັກ
ໃຊ້ STRING ເພື່ອແຍກຄວາມແຕກຕ່າງຂອງ flexml ຫຼາຍລຸ້ນໃນລະຫັດ C ດຽວກັນ, ຄືກັນກັບ
ການໂຕ້ຖຽງ -P flex.
--uri ປະເພດ, -u ປະເພດ
ຕັ້ງຄ່າ URI ຂອງ DTD, ທີ່ໃຊ້ໃນສ່ວນຫົວ "DOCTYPE", ເປັນທີ່ລະບຸ ປະເພດ (ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນຊື່ DTD).
-- verbose, -v
Be verbose: echo ແຕ່ລະການປະກາດ DTD (ຫຼັງຈາກການຂະຫຍາຍຕົວພາລາມິເຕີ).
- ການປ່ຽນແປງ, -V
ພິມສະບັບຂອງ flexml ແລະອອກຈາກການ.
ACTION ເອກະສານ ຮູບແບບ
ໄຟລ໌ປະຕິບັດງານ, ຖືກສົ່ງໄປຫາ -a ທາງເລືອກ, ແມ່ນເອກະສານ XML ທີ່ສອດຄ່ອງກັບ DTD
flexml-act.dtd ຊຶ່ງເປັນດັ່ງຕໍ່ໄປນີ້:
ອົງປະກອບຄວນຖືກນໍາໃຊ້ດັ່ງຕໍ່ໄປນີ້:
"ເທິງ"
ໃຊ້ສໍາລັບລະຫັດ C ລະດັບສູງສຸດເຊັ່ນ: ການປະກາດທົ່ວໂລກ, ຟັງຊັນທີ່ເປັນປະໂຫຍດ, ແລະອື່ນໆ.
"ເລີ່ມຕົ້ນ"
ຄັດຕິດລະຫັດເປັນການດໍາເນີນການກັບອົງປະກອບທີ່ມີຊື່ຂອງ ""tag" ທີ່ກໍານົດໄວ້.
ຄຸນລັກສະນະ. ອົງປະກອບ ""%C-code;"" ຄວນເປັນລະຫັດ C ທີ່ເຫມາະສົມສໍາລັບການລວມຢູ່ໃນ C
block (ie, ພາຍໃນ "{"..."}" ດັ່ງນັ້ນມັນອາດຈະມີຕົວແປທ້ອງຖິ່ນ); ນອກຈາກນັ້ນ
ສ່ວນຂະຫຍາຍຕໍ່ໄປນີ້ສາມາດໃຊ້ໄດ້:
"{"ຄຸນລັກສະນະ" } ": ສາມາດໃຊ້ເພື່ອເຂົ້າເຖິງຄ່າຂອງ ຄຸນລັກສະນະ ທີ່ກໍານົດໄວ້ກັບ
ຄຸນລັກສະນະ"="ມູນຄ່າ ໃນໂຄດຄໍາສັ່ງເລີ່ມຕົ້ນ. ໃນ C, "{"ຄຸນລັກສະນະ"}" ຈະຖືກຕີຄວາມໝາຍ
ອີງຕາມການປະກາດຂອງຄຸນລັກສະນະ. ຖ້າຄຸນລັກສະນະຖືກປະກາດວ່າເປັນ
ປະເພດ enumerated ເຊັ່ນ
ຫຼັງຈາກນັ້ນ, ຄ່າຄຸນລັກສະນະ C ແມ່ນຂອງປະເພດ enumerated ກັບອົງປະກອບລາຍລັກອັກສອນ
"{"ຄຸນລັກສະນະ"="alt1"}", "{"ຄຸນລັກສະນະ"="alt2" } ", ແລະອື່ນໆ; ຍິ່ງໄປກວ່ານັ້ນ ກຳ ນົດ ຄຸນລັກສະນະ
ມີ "ຄ່າ" "{!"ຄຸນລັກສະນະ"}". ຖ້າຄຸນລັກສະນະບໍ່ແມ່ນການນັບລວມແລ້ວ
"{"ຄຸນລັກສະນະ"}" ເປັນສະຕຣິງ C ທີ່ຖືກຍົກເລີກ null (ປະເພດ "char*") ແລະ "{!"ຄຸນລັກສະນະ"}"
ແມ່ນ "NULL".
"ສິ້ນສຸດ"
ເຊັ່ນດຽວກັນ, ຄັດຕິດລະຫັດເປັນການດໍາເນີນການກັບ tag ສຸດທ້າຍທີ່ມີຊື່ຂອງຄວາມຕ້ອງການ
""tag"" ຄຸນລັກສະນະ; ນອກຈາກນັ້ນ, ""%C-code;"" ອົງປະກອບຄວນເປັນລະຫັດ C ທີ່ເຫມາະສົມສໍາລັບ
ລວມຢູ່ໃນບລັອກ C. ໃນກໍລະນີທີ່ອົງປະກອບມີເນື້ອໃນ "ປະສົມ", ເຊັ່ນ, ໄດ້ຖືກປະກາດ
ເພື່ອອະນຸຍາດໃຫ້ "#PCDATA", ຫຼັງຈາກນັ້ນຕົວແປຕໍ່ໄປນີ້ສາມາດໃຊ້ໄດ້:
"{#PCDATA}": ມີຂໍ້ຄວາມ ("#PCDATA") ຂອງອົງປະກອບເປັນ C ທີ່ຖືກຍົກເລີກເປັນ null
string (ປະເພດ "char*"). ໃນກໍລະນີທີ່ອົງປະກອບເນື້ອໃນປະສົມຕົວຈິງແລ້ວປະສົມຂໍ້ຄວາມແລະ
ອົງປະກອບຂອງເດັກນ້ອຍຫຼັງຈາກນັ້ນ "pcdata" ປະກອບດ້ວຍການປະກອບທໍາມະດາຂອງຊິ້ນຂໍ້ຄວາມເປັນ
ສາຍໜຶ່ງ.
"ຕົ້ນຕໍ"
ສຸດທ້າຍ, ອົງປະກອບ ""ຕົ້ນຕໍ" ທາງເລືອກສາມາດປະກອບມີຟັງຊັນ C "ຕົ້ນຕໍ" ຂອງ XML
ຄໍາຮ້ອງສະຫມັກ. ປົກກະຕິແລ້ວຟັງຊັນ "ຕົ້ນຕໍ" ຄວນປະກອບມີ (ຢ່າງຫນ້ອຍ) ຫນຶ່ງການໂທຂອງ
ໂປເຊດເຊີ XML:
"yylex()": ເອີ້ນໂປເຊດເຊີ XML ທີ່ຜະລິດໂດຍ flex(1) ໃນເອກະສານ XML ທີ່ພົບເຫັນຢູ່ໃນ
ການປ້ອນຂໍ້ມູນມາດຕະຖານ (ຕົວຈິງແລ້ວແມ່ນຕົວຈັດການໄຟລ໌ "yyin": ເບິ່ງຄູ່ມືສໍາລັບ flex(1) ສໍາລັບ
ຂໍ້ມູນກ່ຽວກັບວິທີການປ່ຽນແປງນີ້ເຊັ່ນດຽວກັນກັບຊື່ "yylex").
ຖ້າບໍ່ມີການດໍາເນີນການ "ຕົ້ນຕໍ" ຕໍ່ໄປນີ້ແມ່ນຖືກນໍາໃຊ້:
int main() { exit(yylex()); }
ແນະນໍາໃຫ້ໃຊ້ XML <"![CDATA[" ... "]]">ພາກສ່ວນສໍາລັບລະຫັດ C ເພື່ອໃຫ້ແນ່ໃຈວ່າ.
ຕົວອັກສອນທັງຫມົດຖືກສົ່ງຢ່າງຖືກຕ້ອງໄປຫາໄຟລ໌ຜົນຜະລິດ.
ສຸດທ້າຍໃຫ້ສັງເກດວ່າ Flexml ຈັດການອົງປະກອບຫວ່າງເປົ່າໂຄດຄໍາສັ່ງ"/"> ເທົ່າກັບໂຄດຄໍາສັ່ງ><"/"ໂຄດຄໍາສັ່ງ>.
ການແຂ່ງຂັນ
ຕໍ່ໄປນີ້ ເຮັດໃຫ້(1) fragment ໄຟລ໌ສະແດງໃຫ້ເຫັນວິທີການຫນຶ່ງສາມາດລວບລວມ flexml- ໂຄງການຜະລິດ:
# ໂຄງການ.
FLEXML = flexml -v
# ສ້າງໂປເຊດເຊີ XML ທີ່ສາມາດເຊື່ອມຕໍ່ໄດ້ດ້ວຍສ່ວນຫົວສໍາລັບແອັບພລິເຄຊັນ.
%.l %.h: %.dtd
$(FLEXML) $
# ສ້າງແຫຼ່ງ C ຈາກເຄື່ອງສະແກນ flex.
%.c: %.l
$(FLEX) -Bs -o"$@" "$<"
# ສ້າງແຫຼ່ງຄໍາຮ້ອງສະຫມັກ XML C ເພື່ອເຊື່ອມຕໍ່ກັບໂປເຊດເຊີ.
# ໝາຍເຫດ: ການເພິ່ງພາອາໄສຕ້ອງເປັນຮູບແບບ "appl.c: appl.act proc.dtd".
%.c: %act
$(FLEXML) -D -a $^
# ການຜະລິດໂດຍກົງຂອງໂປເຊດເຊີ XML ແບບຢືນຢູ່ຄົນດຽວ + ແອັບພລິເຄຊັນ.
# ໝາຍເຫດ: ການເພິ່ງພາອາໄສຕ້ອງເປັນຮູບແບບ "appl.l: appl.act proc.dtd".
%.l: %act
$(FLEXML) -A -a $^
ໃຊ້ flexml ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net