GoGPT Best VPN GoSearch

OnWorks favicon

btyacc - ອອນລາຍໃນຄລາວ

ແລ່ນ btyacc ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ btyacc ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


btyacc — ເປັນ ລລລ(1) parser generator ສະຫນັບສະຫນູນສໍາລັບການ backtracking

ສະຫຼຸບສັງລວມ


btyac [-ຂ ຄຳ ນຳ ໜ້າ] [-d] [-DNAME ...] [-E] [-l] [-r] [-ສ x.ske] [-t] [-v]
filename.y

ລາຍລະອຽດ


btyacc ແມ່ນສະບັບດັດແກ້ຂອງ byacc (Berkeley YACC), ເຊິ່ງເປັນໂດເມນສາທາລະນະ.
ເວີຊັ່ນຂອງເຄື່ອງແຍກວິເຄາະ AT&T YACC ຕົ້ນສະບັບ.

btyacc ອ່ານສະເພາະໄວຍາກອນໃນໄຟລ໌ filename.y ແລະສ້າງ LR(1​)
parser ສໍາລັບມັນ. parser ປະກອບດ້ວຍຊຸດຂອງ ລລລ(1​) ຕາ​ຕະ​ລາງ​ການ​ວິ​ເຄາະ​ແລະ​ປົກ​ກະ​ຕິ​ຂອງ​ຄົນ​ຂັບ​ໄດ້​
ຂຽນໃນພາສາການຂຽນໂປລແກລມ C. btyacc ປົກກະຕິຂຽນຕາຕະລາງ parse ແລະ
driver routine ກັບໄຟລ໌ ຄຳ ນຳ ໜ້າ.tab.c, ບ່ອນທີ່ ຄຳ ນຳ ໜ້າ ເລີ່ມຕົ້ນເປັນ 'y'.

ສໍາ​ລັບ​ລາຍ​ລະ​ອຽດ​ຂອງ​ຮູບ​ແບບ​ການ​ສະ​ເພາະ​ໄວ​ຍະ​ກອນ​, ແລະ​ດີ​ເລີດ​
ການສອນກ່ຽວກັບວິທີການນໍາໃຊ້ເຄື່ອງມືຄ້າຍຄື YACC, ເບິ່ງຄູ່ມືຂໍ້ມູນສໍາລັບ GNU bison. btyac-
ສ່ວນຂະຫຍາຍສະເພາະແມ່ນໄດ້ອະທິບາຍໄວ້ຂ້າງລຸ່ມນີ້.

ຫມາຍ​ເຫດ​: parser skeleton ທີ່ສະໜອງໃຫ້ໂດຍຜູ້ຂຽນ upstream ຂອງ btyacc ພຽງແຕ່ລວບລວມເປັນ C++. ໃຊ້
ໂຄງກະດູກ /usr/doc/btyacc/examples/btyacc-c.ske ເພື່ອສ້າງຕົວແຍກວິເຄາະທີ່ລວບລວມທັງສອງ
ເປັນ C ແລະ C ++. (ຫນ້າເສຍດາຍ, ໂຄງກະດູກທາງເລືອກນີ້ບໍ່ໄດ້ກວດເບິ່ງ malloc() ໃນປັດຈຸບັນ.
ກັບຄືນມູນຄ່າ.)

ທາງເລືອກໃນການ


-b ຄຳ ນຳ ໜ້າ ປ່ຽນຄຳນຳໜ້າທີ່ນຳໜ້າໃສ່ຊື່ໄຟລ໌ຜົນຜະລິດເປັນສະຕຣິງທີ່ສະແດງໂດຍ
ຄຳ ນຳ ໜ້າ. ຄຳນຳໜ້າເລີ່ມຕົ້ນແມ່ນຕົວອັກສອນ `y'.

-d ສ້າງໄຟລ໌ header ເອີ້ນວ່າ ຄຳ ນຳ ໜ້າ.tab.h ຄຽງຄູ່ກັບການ ຄຳ ນຳ ໜ້າ.tab.c,
ປະກອບດ້ວຍຄໍານິຍາມຂອງສັນຍາລັກແລະການປະກາດສໍາລັບ YYSTYPE ແລະ yylval.

-DNAME ກໍານົດຕົວແປ preprocessor btyacc NAME, ສໍາລັບການນໍາໃຊ້ກັບ %ifdef NAME
ຄໍາແນະນໍາໃນໄຟລ໌ໄວຍາກອນ.

-E ພິມໄວຍະກອນທີ່ປຸງແຕ່ງໄວ້ກ່ອນເປັນຜົນຜະລິດມາດຕະຖານ.

-l ຢ່າໃສ່ #ສາຍ ຄໍາສັ່ງເຂົ້າໄປໃນລະຫັດ parser ທີ່ສ້າງຂຶ້ນ.

-r ຂຽນລະຫັດ parser ແລະຕາຕະລາງທີ່ກ່ຽວຂ້ອງກັບໄຟລ໌ທີ່ແຕກຕ່າງກັນ. ໃນຂະນະທີ່
ຕາຕະລາງສາມາດພົບເຫັນຢູ່ໃນ ຄຳ ນຳ ໜ້າ.tab.c ຄືກັບກ່ອນ, ລະຫັດໄດ້ຖືກຂຽນແລ້ວ
to ຄຳ ນຳ ໜ້າ.code.c.

-S x.ske ເລືອກໂຄງກະດູກຕົວວິເຄາະທີ່ແຕກຕ່າງກັນ. ໂຄງກະດູກເລີ່ມຕົ້ນແມ່ນ hardwired ເຂົ້າໄປໃນ
ໂຄງ​ການ​, ແຕ່​ສໍາ​ເນົາ​ສາ​ມາດ​ພົບ​ເຫັນ​ຢູ່​ໃນ​ໄຟລ​໌​ btyacpa.ske.

-t ເຮັດໃຫ້ລະຫັດດີບັກຖືກລວບລວມເຂົ້າໄປໃນຕົວແຍກວິເຄາະທີ່ສ້າງຂຶ້ນ.

-v ຂຽນລາຍລະອຽດທີ່ມະນຸດສາມາດອ່ານໄດ້ຂອງຕົວແຍກວິເຄາະທີ່ສ້າງຂຶ້ນ y. ຜົນຜະລິດທີ່ຢູ່ ມັນ
ປະກອບມີລັດຕົວວິເຄາະ, ການປະຕິບັດສໍາລັບ token ເບິ່ງລ່ວງໜ້າ ແລະຂໍ້ມູນກ່ຽວກັບໃດໆ
ຂໍ້ຂັດແຍ່ງ.

BTYACC ການຂະຫຍາຍ


ການຕິດຕາມຫຼັງ ສະຫນັບສະຫນູນ
ເມື່ອໃດກໍ່ຕາມ parser ທີ່ສ້າງຂຶ້ນ btyacc ແລ່ນເຂົ້າໄປໃນ shift-reduce ຫຼືຫຼຸດລົງ-reduce ຄວາມຜິດພາດໃນ
parse ຕາ​ຕະ​ລາງ​, ມັນ​ຈື່​ຈໍາ​ຈຸດ parse ໃນ​ປະ​ຈຸ​ບັນ (stack ແລະ​ສະ​ຕ​ຣີມ input​)​, ແລະ​ໄປ​
ເຂົ້າໄປໃນໂໝດວິເຄາະທົດລອງ. ຈາກນັ້ນມັນສືບຕໍ່ວິເຄາະ, ບໍ່ສົນໃຈການກະທຳຂອງກົດລະບຽບສ່ວນໃຫຍ່. ຖ້າມັນແລ່ນ
ເຂົ້າໄປໃນຄວາມຜິດພາດ (ບໍ່ວ່າຈະຜ່ານຕາຕະລາງວິເຄາະຫຼືໂດຍຜ່ານການໂທຫາການປະຕິບັດ YYERROR), ມັນ
backtracks ກັບຈຸດຂັດແຍ້ງຫຼ້າສຸດແລະພະຍາຍາມທາງເລືອກອື່ນ. ຖ້າ​ຫາກ​ວ່າ​ມັນ
ຊອກ​ຫາ​ເສັ້ນ​ທາງ​ທີ່​ສົບ​ຜົນ​ສໍາ​ເລັດ (ເຖິງ​ຕອນ​ທ້າຍ​ຂອງ​ການ​ປ້ອນ​ຂໍ້​ມູນ​ຫຼື​ການ​ຮຽກ​ຮ້ອງ​ການ​ປະ​ຕິ​ບັດ​ YYVALID), ມັນ
backtracks ໄປຫາຈຸດທີ່ທໍາອິດທີ່ມັນເຂົ້າໄປໃນການທົດລອງ parse mode, ແລະສືບຕໍ່ດ້ວຍເຕັມ
parse (ປະຕິບັດການດໍາເນີນການທັງຫມົດ), ປະຕິບັດຕາມເສັ້ນທາງຂອງການທົດລອງສົບຜົນສໍາເລັດ.

ການປະຕິບັດໃນ btyacc ມີສອງລົດຊາດ: {} ການກະ ທຳ, ເຊິ່ງຖືກປະຕິບັດພຽງແຕ່ເມື່ອບໍ່ຢູ່ໃນ
ຮູບແບບການທົດລອງ, ແລະ [] ການປະຕິບັດ, ເຊິ່ງຖືກປະຕິບັດໂດຍບໍ່ຄໍານຶງເຖິງຮູບແບບ.

ຕົວຢ່າງ: ໃນໄວຍາກອນຂອງ YACC ສໍາລັບ C, ການແຮັກມາດຕະຖານທີ່ເອີ້ນວ່າ "lexer feedback hack" ແມ່ນ
ໃຊ້ເພື່ອຊອກຫາຊື່ typedef. Lexer ໃຊ້ຂໍ້ມູນ semantic ເພື່ອຕັດສິນໃຈວ່າມີການໃຫ້
identifier ແມ່ນຊື່ typedef ຫຼືບໍ່ແລະສົ່ງຄືນ token ພິເສດ. ດ້ວຍ btyacc, ເຈົ້າບໍ່
ຕໍ່ໄປອີກແລ້ວຈໍາເປັນຕ້ອງເຮັດສິ່ງນີ້; lexer ຄວນສົ່ງຄືນຕົວລະບຸສະເໝີ. btyac
ຫຼັງຈາກນັ້ນ, ໄວຍາກອນຕ້ອງການກົດລະບຽບຂອງແບບຟອມ:

ຊື່ປະເພດ: ID [ if (!IsTypeName(LookupId($1))) YYERROR; ]

ຢ່າງໃດກໍຕາມ, ໃຫ້ສັງເກດວ່າການເພີ່ມກົດລະບຽບ backtracking ຊ້າລົງ parser. ໃນການປະຕິບັດ, ທ່ານ
ຄວນພະຍາຍາມຈໍາກັດຈໍານວນຂອງຂໍ້ຂັດແຍ່ງໃນໄວຍາກອນກັບສິ່ງທີ່ເປັນຢ່າງແທ້ຈິງ
ຈໍາເປັນ. ພິຈາລະນາໃຊ້ "lexer feedback hack" ຖ້າມັນເປັນການແກ້ໄຂທີ່ສະອາດ, ແລະ
ສະຫງວນ backtracking ສໍາລັບກໍລະນີພິເສດຈໍານວນຫນ້ອຍ.

btyacc ດໍາເນີນການທົດລອງຂອງຕົນໂດຍໃຊ້ກົດລະບຽບ "ລອງປ່ຽນກ່ອນ, ຫຼັງຈາກນັ້ນພະຍາຍາມຫຼຸດລົງໃນຄໍາສັ່ງ
ກົດລະບຽບທີ່ຂັດແຍ້ງປາກົດຢູ່ໃນໄຟລ໌ປ້ອນຂໍ້ມູນ" ນີ້ຫມາຍຄວາມວ່າທ່ານສາມາດປະຕິບັດໄດ້
ກົດລະບຽບ disambiguation semantic ເຊັ່ນ: (1) ຖ້າມັນເບິ່ງຄືວ່າເປັນການປະກາດ,
ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ (2​) ຖ້າ​ຫາກ​ວ່າ​ມັນ​ຄ້າຍ​ຄື​ການ​ສະ​ແດງ​ອອກ​, ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ (3​) ມັນ​ເປັນ syntax ຜິດ​ພາດ​.
[Ellis & Stroustrup, Annotated C++ Reference Manual, p93]. ເພື່ອເຮັດສິ່ງນີ້, ເອົາທັງຫມົດ
ກົດລະບຽບສໍາລັບການປະກາດກ່ອນກົດລະບຽບສໍາລັບການສະແດງອອກໃນໄຟລ໌ໄວຍາກອນ.

Backtracking ແມ່ນກະຕຸ້ນພຽງແຕ່ເມື່ອ parse ບັນລຸການປ່ຽນແປງ / ຫຼຸດລົງຫຼືຫຼຸດລົງ / ຫຼຸດລົງ
ຂໍ້ຂັດແຍ່ງໃນຕາຕະລາງ. ຖ້າທ່ານບໍ່ມີຄວາມຂັດແຍ້ງໃນໄວຍາກອນຂອງທ່ານ, ບໍ່ມີຄ່າໃຊ້ຈ່າຍເພີ່ມເຕີມ,
ນອກ ເໜືອ ໄປຈາກລະຫັດພິເສດບາງຢ່າງທີ່ຈະບໍ່ຖືກເອີ້ນ.

ໃນປັດຈຸບັນ, parser ທີ່ສ້າງຂຶ້ນດໍາເນີນການ no pruning ຂອງ​ເສັ້ນ​ທາງ​ການ​ແຍກ​ສະ​ຫຼັບ​. ເພື່ອຫຼີກເວັ້ນການ
ການລະເບີດຂອງ exponential ຂອງເສັ້ນທາງທີ່ເປັນໄປໄດ້ (ແລະເວລາວິເຄາະ), ທ່ານຈໍາເປັນຕ້ອງບອກດ້ວຍຕົນເອງ
parser ເມື່ອມັນສາມາດຖິ້ມເສັ້ນທາງທີ່ບັນທຶກໄວ້ໂດຍໃຊ້ YYVALID ຖະແຫຼງການ. ໃນ
ການ​ປະ​ຕິ​ບັດ​, ນີ້ turns ອອກ​ຈະ​ເປັນ​ທໍາ​ມະ​ດາ​ງ່າຍ​ທີ່​ຈະ​ເຮັດ​ໄດ້​. ຕົວຢ່າງເຊັ່ນ C ++ parser ສາມາດພຽງແຕ່
ບັນຈຸ [YYVALID;] ຫຼັງ​ຈາກ​ການ​ປະ​ກາດ​ຄົບ​ຖ້ວນ​ສົມ​ບູນ​ແລະ​ກົດ​ລະ​ບຽບ​ຖະ​ແຫຼງ​ການ​, ຜົນ​ໄດ້​ຮັບ​
ສະຖານະ backtracking ຖືກຕັດອອກຫຼັງຈາກເຫັນ `;' ຫຼື `}' - ຈະບໍ່ເຄີຍມີ
ສະ​ຖາ​ນະ​ການ​ທີ່​ມັນ​ເປັນ​ປະ​ໂຫຍດ​ທີ່​ຈະ​ກັບ​ຄືນ​ໄປ​ບ່ອນ​ທັງ​ຫມົດ​ຂອງ​ເຫຼົ່າ​ນີ້​.

ປັບປຸງ token ຕໍາແຫນ່ງ ການຈັດການ
ຜູ້ລວບລວມຂໍ້ມູນມັກຈະຕ້ອງສ້າງ ASTs (ຕົ້ນໄມ້ syntax ທີ່ບໍ່ມີຕົວຕົນ) ເຊັ່ນວ່າທຸກໆ node ໃນຕົ້ນໄມ້
ສາ​ມາດ​ກ່ຽວ​ຂ້ອງ​ກັບ​ແຫຼ່ງ​ໂຄງ​ການ​ທີ່​ໄດ້​ວິ​ເຄາະ​ມັນ​ມາ​ຈາກ​. ໄດ້ YYPOSN ກົນ​ໄກ​ສະ​ຫນັບ​ສະ​ຫນູນ​
ໂດຍ btyacc ຊ່ວຍໃຫ້ທ່ານໃນອັດຕະໂນມັດການຄິດໄລ່ຕໍາແຫນ່ງຂໍ້ຄວາມແລະໃນການມອບຫມາຍ
ຕໍາ​ແຫນ່ງ​ຂໍ້​ຄວາມ​ທີ່​ຄໍາ​ນວນ​ກັບ​ຂໍ້ AST​.

ໃນ YACCs ມາດຕະຖານທຸກ token ແລະທຸກ non-terminal ມີ YYSTYPE ຄ່າ semantic
ຕິດກັບມັນ. ດ້ວຍ btyacc, ທຸກໆ token ແລະທຸກ non-terminal ຍັງມີ YYPOSN ຂໍ້ຄວາມ
ຕໍາ​ແຫນ່ງ​ຕິດ​ກັບ​ມັນ​. YYPOSN ເປັນປະເພດທີ່ຜູ້ໃຊ້ກໍານົດ.

btyacc ຮັກສາ stack ຂອງຄ່າຕໍາແຫນ່ງຂໍ້ຄວາມໃນແບບດຽວກັນທີ່ມັນຮັກສາ stack
ຂອງຄ່າ semantic. ເພື່ອເຮັດໃຫ້ການນໍາໃຊ້ຄຸນນະສົມບັດຕໍາແຫນ່ງຂໍ້ຄວາມ, ທ່ານຈໍາເປັນຕ້ອງໄດ້ #ກໍານົດ ໄດ້
ຕໍ່ໄປນີ້:

YYPOSN Preprocessor ສັນ​ຍາ​ລັກ​ສໍາ​ລັບ​ປະ​ເພດ C/C++ ຂອງ​ຕໍາ​ແຫນ່ງ​ຂໍ້​ຄວາມ​ທີ່​ຕິດ​ກັບ​ທຸກ
token ແລະ non-terminal.

yyposn ຕົວແປທົ່ວໂລກຂອງປະເພດ YYPOSN. lexer ຕ້ອງກໍາຫນົດຕໍາແຫນ່ງຂໍ້ຄວາມຂອງ
ກັບຄືນ token ກັບ yyposn, ຄືກັນກັບມັນກໍານົດຄ່າ semantic ຂອງ
ກັບຄືນ token ກັບ yylval.

YYREUCEPOSNFUNC
ສັນຍາລັກຂອງໂປເຊດເຊີ Preprocessor ສໍາລັບຟັງຊັນທີ່ຖືກເອີ້ນວ່າທັນທີຫຼັງຈາກປົກກະຕິ
ການ​ຫຼຸດ​ຜ່ອນ​ກົດ​ລະ​ບຽບ​ໄວ​ຍະ​ກອນ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​, ເພື່ອ​ຫຼຸດ​ຜ່ອນ​ຕໍາ​ແຫນ່ງ​ຂໍ້​ຄວາມ​ທີ່​ຕັ້ງ​ຢູ່​
stack ໄດ້.

ໂດຍປົກກະຕິ, ຟັງຊັນນີ້ສະກັດຕໍາແຫນ່ງຂໍ້ຄວາມຈາກກົດລະບຽບດ້ານຂວາມື
ອົງປະກອບ ແລະຈະມອບໃຫ້ເຂົາເຈົ້າກັບໂຄງສ້າງ/ຕົ້ນໄມ້ $$ ຫຼື ຖ້າບໍ່ແມ່ນ
ມູນຄ່າ $$ ຖືກສົ່ງຄືນ, ເຮັດໃຫ້ພວກເຂົາເຂົ້າໄປໃນຕໍາແຫນ່ງຂໍ້ຄວາມ ret ບ່ອນທີ່ມັນຈະຢູ່
ໄດ້​ຮັບ​ໂດຍ​ກົດ​ລະ​ບຽບ​ອື່ນໆ​ພາຍ​ຫຼັງ​. ຕົ້ນແບບຂອງມັນແມ່ນ:

void ຫຼຸດPosn(
YYPOSN& ການປະຕິເສດ,
YYPOSN* term_posns,
YYSTYPE* term_vals,
int term_no,
int stk_pos,
int yychar,
YYPOSN& yyposn,
ປະເພດຜູ້ໃຊ້ ພິເສດ);

ret ການອ້າງອີງເຖິງຕໍາແຫນ່ງຂໍ້ຄວາມທີ່ສົ່ງຄືນໂດຍກົດລະບຽບ. ທ່ານຕ້ອງຂຽນທັບ
ນີ້ກັບຕໍາແຫນ່ງຂໍ້ຄວາມທີ່ຄໍານວນທີ່ກົດລະບຽບໃຫ້ຜົນ, ປຽບທຽບກັບ
ຄ່າ semantic $$.

term_posns
Array ຂອງອົງປະກອບກົດລະບຽບດ້ານຂວາມື ' YYPOSN ຕໍາ​ແຫນ່ງ​ຂໍ້​ຄວາມ​,
ປຽບທຽບກັບ $1, $2, ..., $N ສໍາລັບຄ່າ semantic.

term_vals Array ຂອງອົງປະກອບກົດລະບຽບດ້ານຂວາມື ' YYSTYPE ຄຸນຄ່າ. ພວກ​ນີ້​ແມ່ນ
$1, ..., $N ດ້ວຍຕົນເອງ.

term_no ຈໍາ​ນວນ​ຂອງ​ອົງ​ປະ​ກອບ​ໃນ​ເບື້ອງ​ຂວາ​ຂອງ​ກົດ​ລະ​ບຽບ​ການ​ຫຼຸດ​ຜ່ອນ​, ເຊັ່ນ​: ໄດ້​
ຂະໜາດຂອງ term_posns ແລະ term_vals arrays. ຍັງເທົ່າກັບ N ໃນ $1, ...,
$N.

stk_pos YYSTYPE/YYPOSN ຕໍາແຫນ່ງ stack ກ່ອນທີ່ຈະຫຼຸດລົງ.

yychar Lookahead token ທີ່ທັນທີປະຕິບັດຕາມດ້ານຂວາທີ່ຫຼຸດລົງ
ສ່ວນປະກອບ

yyposn YYPOSN ຂອງ token ທີ່ທັນທີປະຕິບັດຕາມດ້ານຂວາມືທີ່ຫຼຸດລົງ
ສ່ວນປະກອບ

argument ພິເສດທີ່ກໍານົດໂດຍຜູ້ໃຊ້ເພີ່ມເຕີມໄດ້ຖືກສົ່ງໄປຫາ ReducePosn.

YYREUCEPOSNFUNCARG
argument ພິເສດໄດ້ຜ່ານໄປຫາຟັງຊັນ ReducePosn. ການໂຕ້ຖຽງນີ້ສາມາດເປັນອັນໃດກໍໄດ້
ຕົວແປທີ່ກໍານົດໃນ btyacpa.ske.

token ການຈັດສັນ ໃນລະຫວ່າງການ ຄວາມຜິດພາດ ການຟື້ນຟູ
ສໍາລັບເຄື່ອງສ້າງຕົວວິເຄາະຄ້າຍຄື YACC ສ່ວນໃຫຍ່, ການປະຕິບັດຂອງຕົວແຍກວິເຄາະທີ່ສ້າງຂຶ້ນເມື່ອພົບ
parse error ແມ່ນການຖິ້ມຄ່າ semantic ແລະ input tokens ຈົນກ່ວາກົດລະບຽບທີ່ມີ.
ພິເສດທີ່ບໍ່ແມ່ນຢູ່ປາຍຍອດ ຄວາມຜິດພາດ ສາມາດຈັບຄູ່ໄດ້. ການຍົກເລີກ tokens ແມ່ນປະຕິບັດພຽງແຕ່ໂດຍ
ຂຽນທັບຕົວແປແລະລາຍການ array ຂອງປະເພດ YYSTYPE ກັບຄຸນຄ່າໃຫມ່.

ແຕ່ຫນ້າເສຍດາຍ, ວິທີການນີ້ເຮັດໃຫ້ຄວາມຊົງຈໍາຮົ່ວໄຫຼຖ້າ YYSTYPE ເປັນປະເພດຕົວຊີ້. btyac
ອະນຸຍາດໃຫ້ທ່ານເພື່ອສະຫນອງຫນ້າທີ່ສໍາລັບການທໍາຄວາມສະອາດເຖິງ semantic ແລະຄ່າຕໍາແຫນ່ງຂໍ້ຄວາມ, ໂດຍ
#ກໍານົດໂດຍມີສັນຍາລັກຕໍ່ໄປນີ້ຢູ່ໃນຄໍານໍາຂອງໄຟລ໌ໄວຍາກອນຂອງທ່ານ:

YYDELETEVAL
ສັນຍາລັກກ່ອນໂປຣເຊສເຊີສຳລັບຟັງຊັນທີ່ຈະເອີ້ນກ່ອນຄ່າ semantic ຂອງ token
ຫຼືເຄື່ອງທີ່ບໍ່ແມ່ນຢູ່ປາຍທາງຖືກຍົກເລີກ.

YYDELETEPOSN
ສັນ​ຍາ​ລັກ​ຕົວ​ປະ​ມວນ​ຜົນ​ສໍາ​ລັບ​ຫນ້າ​ທີ່​ທີ່​ຈະ​ໂທ​ຫາ​ກ່ອນ​ທີ່​ຕໍາ​ແຫນ່ງ​ຂໍ້​ຄວາມ​ຂອງ token ໄດ້​
ຫຼືເຄື່ອງທີ່ບໍ່ແມ່ນຢູ່ປາຍທາງຖືກຍົກເລີກ.

ທັງສອງຫນ້າທີ່ຖືກເອີ້ນວ່າມີການໂຕ້ຖຽງສອງຢ່າງ. ການໂຕ້ຖຽງທໍາອິດຂອງປະເພດ YYSTYPE or YYPOSN
ແມ່ນມູນຄ່າທີ່ຈະຖືກຍົກເລີກ. ການໂຕ້ຖຽງທີສອງແມ່ນປະເພດ int ແລະແມ່ນ ໜຶ່ງ ໃນນັ້ນ
ສາມ​ຄຸນ​ຄ່າ​:

0 ການຍົກເລີກ token ການປ້ອນຂໍ້ມູນ

1 ລັດການຍົກເລີກໃນ stack

2 ເຮັດຄວາມສະອາດ stack ເມື່ອເອົາລູກອອກ

ລາຍະລະອຽດ syntax ຄວາມຜິດພາດ ການລາຍງານ
ຖ້າ​ເຈົ້າ #ກໍານົດ ຕົວແປຂອງຕົວປະມວນຜົນກ່ອນ YYERROR_DETAILED ໃນໄຟລ໌ໄວຍາກອນຂອງທ່ານ, ທ່ານຕ້ອງ
ຍັງກໍານົດຫນ້າທີ່ການປະມວນຜົນຄວາມຜິດພາດຕໍ່ໄປນີ້:

void yyerror_detailed(
char* ຂໍ້ຄວາມ,
int ຜິດພາດ,
YYSTYPE&
errt_value,
YYPOSN& errt_posn);

ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ຂໍ້​ຄວາມ​

ລະຫັດ errt ຂອງ token ທີ່ເຮັດໃຫ້ເກີດຄວາມຜິດພາດ

errt_value
ຄ່າຂອງ token ທີ່ເຮັດໃຫ້ເກີດຄວາມຜິດພາດ

errt_posn ຕໍາແຫນ່ງຂໍ້ຄວາມຂອງ token ທີ່ເຮັດໃຫ້ເກີດຄວາມຜິດພາດ

ໂປເຈັກເຕີ້ directives
btyacc ສະຫນັບສະຫນູນການກໍານົດສັນຍາລັກແລະປະຕິບັດໃຫ້ເຂົາເຈົ້າກັບຄໍາສັ່ງທີ່ມີເງື່ອນໄຂພາຍໃນ
ໄຟລ໌ໄວຍາກອນ, ບໍ່ແຕກຕ່າງຈາກ C preprocessor.

% ກໍານົດ NAME
ກໍານົດສັນຍາລັກ preprocessor NAME. ເທົ່າກັບການປ່ຽນເສັ້ນຄໍາສັ່ງ
-DNAME.

%ifdef NAME
ຖ້າຕົວປະມວນຜົນ preprocessor ມີການປ່ຽນແປງ NAME ຖືກກໍານົດ, ປະມວນຜົນຂໍ້ຄວາມຈາກນີ້ %ifdef to
ປິດ %endifຖ້າບໍ່ດັ່ງນັ້ນໃຫ້ຂ້າມມັນໄປ.

%endif ຄຳສັ່ງປິດສຳລັບ %ifdef. %ifdefs ບໍ່ສາມາດຖືກຮັງໄດ້.

% ລວມມີ ຊື່​ເອ​ກະ​ສານ
ເນື້ອໃນຂະບວນການຂອງໄຟລ໌ທີ່ມີຊື່ ຊື່​ເອ​ກະ​ສານ. ພຽງແຕ່ຫນຶ່ງລະດັບການຮັງຂອງ % ລວມມີ
ຖືກອະນຸຍາດ.

%ident ຄັກ
ໃສ່ `#ລະບຸຕົວຕົນ ຄັກ' ຄໍາສັ່ງເຂົ້າໄປໃນໄຟລ໌ຜົນຜະລິດ. ຄັກ ຕ້ອງເປັນ
string ຄົງທີ່ enclosed ໃນ "".

ມູນມໍລະດົກ attributes
ຄຸນສົມບັດທີ່ສືບທອດແມ່ນບໍ່ມີເອກະສານ. (ເບິ່ງ README ແລະລະຫັດແຫຼ່ງ btyacc ສໍາລັບ a
ຂໍ້ ມູນ ພຽງ ເລັກ ນ້ອຍ[email protected]>!

ແມງໄມ້


ຄວາມຊັບຊ້ອນກໍລະນີຮ້າຍແຮງທີ່ສຸດຂອງການແຍກວິເຄາະແມ່ນເລກກຳລັງສຳລັບໄວຍະກອນທີ່ອະນຸຍາດໃຫ້
backtracking ທີ່ຈະເກີດຂຶ້ນ. ໃນຄໍາສັບຕ່າງໆອື່ນໆ, parser ທີ່ສ້າງໂດຍ btyacc ປະກອບເປັນ a
bug ປະຕິເສດການບໍລິການຖ້າຖືກນໍາໃຊ້ໃນແອັບພລິເຄຊັນທີ່ຜູ້ໂຈມຕີສາມາດສະຫນອງໄດ້
ຂໍ້​ມູນ​ທີ່​ຖືກ​ສ້າງ​ເປັນ​ພິ​ເສດ​ເປັນ​ການ​ປ້ອນ​ຂໍ້​ມູນ​ເຂົ້າ​ໄປ​ໃນ​ຕົວ​ວິ​ໄຈ​. (ສໍາລັບຂໍ້ມູນການປ້ອນຂໍ້ມູນ "ປົກກະຕິ" ທັງໝົດ, the
ຄວາມ​ສັບ​ສົນ​ທີ່​ອາດ​ຈະ​ເປັນ​ຕົວ​ເລກ​ບໍ່​ແມ່ນ​ປົກ​ກະ​ຕິ​ເປັນ​ບັນ​ຫາ​.)

ຂອງ bison ຄາດຫວັງ ບໍ່ຮອງຮັບຄຳແນະນຳ.

ບໍ່​ມີ % ອື່ນໆ ແລະ %ifndef. %ifdefs and % ລວມມີs ບໍ່ສາມາດຖືກຮັງໄດ້.

ຜູ້ຂຽນ


Robert Corbett[email protected]> /[email protected]> ແມ່ນຫນຶ່ງໃນ
ຜູ້ຂຽນຕົ້ນສະບັບຂອງ Berkeley byacc. Chris Dodd[email protected]> ມີ brilliant
ແນວຄວາມຄິດຂອງການເພີ່ມຄວາມສາມາດ backtracking, ແລະຮັບຜິດຊອບສໍາລັບການ backtracking ເບື້ອງຕົ້ນ
ການປ່ຽນແປງ. Vadim Maslov[email protected]> ປັບປຸງລະຫັດຕື່ມອີກ.

ເອກະສານນີ້ຂຽນໂດຍ Richard Atterer[email protected]> ສໍາລັບ Debian
ການແຈກຢາຍ GNU/Linux, ແຕ່ຖືກບໍລິຈາກໃຫ້ສາທາລະນະແລະດັ່ງນັ້ນຈຶ່ງອາດຈະຖືກນໍາໃຊ້ຢ່າງເສລີ
ເພື່ອຈຸດປະສົງໃດກໍ່ຕາມ.

ໄຟ


/usr/doc/btyacc/examples/btyaccpa.ske

/usr/doc/btyacc/examples/btyacc-c.ske

/usr/doc/btyacc/README

ເບິ່ງ ຍັງ


bison(1​) (ຫຼື 'info bison'), byacc(1​), yacc(1​), antlr(1​)

btyac(1​)

ໃຊ້ btyacc ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net


ເຊີບເວີ ແລະສະຖານີເຮັດວຽກຟຣີ

ດາວໂຫຼດແອັບ Windows ແລະ Linux

Linux ຄຳ ສັ່ງ

Ad




×
ການ​ໂຄ​ສະ​ນາ
?ຊື້ເຄື່ອງ, ຈອງ, ຫຼືຊື້ທີ່ນີ້ — ບໍ່ມີຄ່າໃຊ້ຈ່າຍ, ຊ່ວຍໃຫ້ການບໍລິການຟຣີ.