ນີ້ແມ່ນຄໍາສັ່ງ byacc ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
Yacc - ເປັນ ລລລ(1) parser generator
ສະຫຼຸບສັງລວມ
yacc [ -BdgilLPrtvVy ] [ -b file_prefix ] [ -o output_file ] [ -p symbol_prefix ] ຊື່ເອກະສານ
ລາຍລະອຽດ
Yacc ອ່ານສະເພາະໄວຍາກອນໃນໄຟລ໌ ຊື່ເອກະສານ ແລະສ້າງ ລລລ(1) parser
ສໍາລັບມັນ. ຕົວວິເຄາະປະກອບດ້ວຍຊຸດຂອງ ລລລ(1) ຕາຕະລາງການວິເຄາະແລະປົກກະຕິຂອງຄົນຂັບໄດ້
ຂຽນໃນພາສາການຂຽນໂປລແກລມ C. Yacc ປົກກະຕິຂຽນຕາຕະລາງ parse ແລະ
driver routine ກັບໄຟລ໌ y.tab.c.
ຕົວເລືອກຕໍ່ໄປນີ້ສາມາດໃຊ້ໄດ້:
-b file_prefix
ໄດ້ -b ທາງເລືອກການປ່ຽນແປງຄໍານໍາຫນ້າ prepended ກັບຊື່ໄຟລ໌ຜົນຜະລິດເປັນສະຕຣິງ
ຫມາຍເຖິງ file_prefix. ຄໍານໍາຫນ້າເລີ່ມຕົ້ນແມ່ນຕົວອັກສອນ y.
-B ສ້າງ backtracking parser (compile-type configuration for btyac).
-d ໄດ້ -d ທາງເລືອກເຮັດໃຫ້ໄຟລ໌ຫົວ y.tab.h ຈະຖືກຂຽນ. ມັນປະກອບດ້ວຍ #define's
ສໍາລັບຕົວລະບຸ token.
-g ໄດ້ -g ທາງເລືອກເຮັດໃຫ້ມີລາຍລະອຽດຮູບພາບຂອງການຜະລິດໄດ້ ລລລ(1) parser ຈະ
ຂຽນໃສ່ໄຟລ໌ y.dot ໃນຮູບແບບ graphviz, ພ້ອມທີ່ຈະດໍາເນີນການໂດຍ ຈຸດ(1).
-i ໄດ້ -i ທາງເລືອກເຮັດໃຫ້ໄຟລ໌ສ່ວນຫົວເພີ່ມເຕີມ y.tab.i ຈະຖືກຂຽນ. ມັນປະກອບດ້ວຍ
ຖະແຫຼງການພາຍນອກ ແລະ ເພີ່ມເຕີມ #define's ຕາມຄວາມຈໍາເປັນ ເພື່ອສ້າງແຜນທີ່ແບບດັ້ງເດີມ
yacc yy- ຊື່ທີ່ນໍາຫນ້າກັບອັນໃດກໍຕາມ -p ທາງເລືອກອາດຈະລະບຸ. ໄຟລ໌ລະຫັດ, e.g.
y.tab.c ຖືກແກ້ໄຂເພື່ອ #include ໄຟລ໌ນີ້ເຊັ່ນດຽວກັນກັບ y.tab.h ໄຟລ໌, ການບັງຄັບໃຊ້
ການນໍາໃຊ້ທີ່ສອດຄ່ອງຂອງສັນຍາລັກທີ່ກໍານົດໄວ້ໃນໄຟລ໌ເຫຼົ່ານັ້ນ.
ໄຟລ໌ສ່ວນຫົວເສີມເຮັດໃຫ້ມັນງ່າຍກວ່າທີ່ຈະແຍກການລວບລວມຂອງ lex- ແລະ
yacc-files.
-l ຖ້າ -l ທາງເລືອກແມ່ນບໍ່ໄດ້ລະບຸໄວ້, yacc ຈະແຊກ #ສາຍ ຄໍາແນະນໍາໃນການຜະລິດ
ລະຫັດ. ໄດ້ #ສາຍ ຄໍາສັ່ງໃຫ້ C compiler ກ່ຽວຂ້ອງກັບຄວາມຜິດພາດໃນລະຫັດທີ່ສ້າງຂຶ້ນ
ລະຫັດຕົ້ນສະບັບຂອງຜູ້ໃຊ້. ຖ້າ -l ທາງເລືອກແມ່ນໄດ້ລະບຸໄວ້, yacc ຈະບໍ່ໃສ່
#ສາຍ ທິດທາງ. #ສາຍ ຄໍາສັ່ງທີ່ລະບຸໄວ້ໂດຍຜູ້ໃຊ້ຈະຖືກຮັກສາໄວ້.
-L ເຮັດໃຫ້ການປະມວນຜົນຕໍາແຫນ່ງ, ຕົວຢ່າງ, "% ສະຖານທີ່" (ການຕັ້ງຄ່າການສັງລວມປະເພດສໍາລັບການ
btyac).
-o output_file
ລະບຸຊື່ໄຟລ໌ສໍາລັບໄຟລ໌ parser. ຖ້າທາງເລືອກນີ້ບໍ່ໄດ້ຖືກມອບໃຫ້, ຜົນຜະລິດ
filename ແມ່ນຄໍານໍາຫນ້າຂອງໄຟລ໌ concatenated ກັບ suffix ໄຟລ໌, ຕົວຢ່າງ, y.tab.c. ນີ້
overrides ໄດ້ -b ທາງເລືອກ.
-p symbol_prefix
ໄດ້ -p ທາງເລືອກຈະປ່ຽນຄໍານໍາຫນ້າຕໍ່ຫນ້າກັບສັນຍາລັກທີ່ສ້າງໂດຍ yacc ກັບສະຕຣິງ
ຫມາຍເຖິງ symbol_prefix. ຄຳນຳໜ້າເລີ່ມຕົ້ນແມ່ນສະຕຣິງ yy.
-P ສ້າງ parser reentrant, ຕົວຢ່າງ, “%pure-parser”.
-r ໄດ້ -r ສາເຫດທາງເລືອກ yacc ເພື່ອຜະລິດໄຟລ໌ແຍກຕ່າງຫາກສໍາລັບລະຫັດແລະຕາຕະລາງ. ລະຫັດ
ໄຟລ໌ມີຊື່ y.code.c, ແລະໄຟລ໌ຕາຕະລາງແມ່ນມີຊື່ y.tab.c. ຄຳ ນຳ ໜ້າy.” ສາມາດເປັນ
overridden ການ ນໍາ ໃຊ້ -b ທາງເລືອກ.
-s ສະກັດກັ້ນ "#ກໍານົດ"ຄໍາຖະແຫຼງທີ່ສ້າງຂຶ້ນສໍາລັບຕົວຫນັງສືສະຕຣິງໃນ "%ໂທເຄັນ"ຖະແຫຼງການ,
ເພື່ອໃຫ້ກົງກັບຕົ້ນສະບັບຫຼາຍຂື້ນ yacc ພຶດຕິ ກຳ.
ປົກກະຕິເມື່ອ yacc ເຫັນເສັ້ນເຊັ່ນ
%token OP_ADD "ADD"
ມັນສັງເກດເຫັນວ່າ "ADD" ທີ່ຍົກມາແມ່ນຕົວລະບຸ C ທີ່ຖືກຕ້ອງ, ແລະສ້າງ #define not.
ພຽງແຕ່ສໍາລັບ OP_ADD, ແຕ່ສໍາລັບ ADD ເຊັ່ນດຽວກັນ, ຕົວຢ່າງ,
#ກໍານົດ OP_ADD 257
#ກໍານົດຕື່ມ 258
ຕົ້ນສະບັບ yacc ບໍ່ໄດ້ສ້າງທີສອງ "#ກໍານົດ”. ທ -s ທາງເລືອກສະກັດກັ້ນ
ນີ້ "#ກໍານົດ".
POSIX (IEEE 1003.1 2004) ເອກະສານພຽງແຕ່ຊື່ ແລະຕົວເລກສໍາລັບ “%ໂທເຄັນ”, ເຖິງແມ່ນວ່າ
ຕົ້ນສະບັບ yacc ແລະ bison ຍັງຍອມຮັບຕົວຫນັງສືຊ່ອຍແນ່.
-t ໄດ້ -t ທາງເລືອກປ່ຽນຄໍາສັ່ງ preprocessor ທີ່ສ້າງຂຶ້ນໂດຍ yacc ດັ່ງນັ້ນການ debugging
ຖະແຫຼງການຈະຖືກລວມເຂົ້າໃນລະຫັດທີ່ລວບລວມ.
-v ໄດ້ -v ທາງເລືອກເຮັດໃຫ້ຄໍາອະທິບາຍຂອງມະນຸດສາມາດອ່ານໄດ້ຂອງຕົວແຍກວິເຄາະທີ່ສ້າງຂຶ້ນ
ຂຽນໃສ່ໄຟລ໌ y. ຜົນຜະລິດ.
-V ພິມເລກເວີຊັ່ນເປັນຜົນຜະລິດມາດຕະຖານ.
-y yacc ບໍ່ສົນໃຈທາງເລືອກນີ້, ເຊິ່ງ bison ສະຫນັບສະຫນູນສໍາລັບການເຂົ້າກັນໄດ້ POSIX ostensible.
ການສົນທະນາ
yacc ສະຫນອງການຂະຫຍາຍບາງຢ່າງສໍາລັບຄວາມເຂົ້າກັນໄດ້ກັບ bison ແລະການປະຕິບັດອື່ນໆຂອງ
yacc. ໄດ້ %ຜູ້ທຳລາຍ ແລະ % ສະຖານທີ່ ຄຸນນະສົມບັດສາມາດໃຊ້ໄດ້ພຽງແຕ່ຖ້າຫາກວ່າ yacc ໄດ້
ການຕັ້ງຄ່າແລະການສັງລວມເພື່ອສະຫນັບສະຫນູນການຕິດຕາມຫຼັງ (btyac) ການທໍາງານ. ໄດ້
ຄຸນນະສົມບັດທີ່ຍັງເຫຼືອແມ່ນມີຢູ່ສະເຫມີ:
%ຜູ້ທຳລາຍ { ລະຫັດ } ສັນຍາລັກ+
ກໍານົດລະຫັດທີ່ຖືກເອີ້ນເມື່ອສັນຍາລັກຖືກຍົກເລີກໂດຍອັດຕະໂນມັດໃນລະຫວ່າງຄວາມຜິດພາດ
ການຟື້ນຕົວ. ລະຫັດນີ້ສາມາດຖືກໃຊ້ເພື່ອຮຽກຄືນຄວາມຊົງຈໍາທີ່ຈັດສັນແບບໄດນາມິກທີ່ເຊື່ອມໂຍງ
ດ້ວຍຄ່າ semantic ທີ່ສອດຄ້ອງກັນສໍາລັບກໍລະນີທີ່ການກະທໍາຂອງຜູ້ໃຊ້ບໍ່ສາມາດຈັດການໄດ້
ຄວາມຊົງຈໍາຢ່າງຊັດເຈນ.
ເມື່ອພົບຂໍ້ຜິດພາດໃນການແຍກວິເຄາະ, ຕົວແຍກວິເຄາະທີ່ສ້າງຂຶ້ນຈະຍົກເລີກສັນຍາລັກຢູ່ໃນ stack
ແລະ input tokens ຈົນກ່ວາມັນໄປຮອດສະຖານະທີ່ຈະຊ່ວຍໃຫ້ parsing ສືບຕໍ່.
ວິທີການຟື້ນຕົວຄວາມຜິດພາດນີ້ເຮັດໃຫ້ເກີດຄວາມຊົງຈໍາຮົ່ວຖ້າຫາກວ່າ YYSTYPE ມູນຄ່າແມ່ນ, ຫຼື
ມີ, ຕົວຊີ້ໄປຫາຫນ່ວຍຄວາມຈໍາທີ່ຈັດສັນແບບໄດນາມິກ.
ວົງເລັບ ລະຫັດ ຖືກເອີ້ນທຸກຄັ້ງທີ່ຕົວວິເຄາະຍົກເລີກສັນຍາລັກອັນໃດອັນໜຶ່ງ.
ພາຍໃນ ລະຫັດ, "$$"ຫຼື"$ $” ກໍານົດມູນຄ່າ semantic ທີ່ກ່ຽວຂ້ອງກັບ
ສັນຍາລັກທີ່ຖືກຍົກເລີກ, ແລະ "@$” ກໍານົດສະຖານທີ່ຂອງມັນ (ເບິ່ງ % ສະຖານທີ່ ຄໍາສັ່ງ).
A per-symbol destructor ແມ່ນຖືກກໍານົດໂດຍລາຍຊື່ສັນຍາລັກໄວຍາກອນໃນ ສັນຍາລັກ+. ຕໍ່-
type destructor ຖືກກໍານົດໂດຍລາຍຊື່ແທັກປະເພດ semantic (ເຊັ່ນ: " ”) ໃນ
ສັນຍາລັກ+; ໃນກໍລະນີນີ້, parser ຈະເອີ້ນ ລະຫັດ ທຸກຄັ້ງທີ່ມັນຖິ້ມໄວຍາກອນໃດນຶ່ງ
ສັນຍາລັກທີ່ມີໂຄດຄໍາສັ່ງປະເພດ semantic ນັ້ນ, ເວັ້ນເສຍແຕ່ສັນຍາລັກທີ່ມີຂອງຕົນເອງຕໍ່ສັນຍາລັກ
ຜູ້ທຳລາຍ.
ສອງປະເພດຂອງ destructor ເລີ່ມຕົ້ນແມ່ນສະຫນັບສະຫນູນທີ່ຖືກຮຽກຮ້ອງໃນເວລາຍົກເລີກ
ສັນຍາລັກໄວຍະກອນໃດຫນຶ່ງທີ່ບໍ່ມີຕໍ່ສັນຍາລັກແລະບໍ່ມີການທໍາລາຍຕໍ່ປະເພດ:
·ລະຫັດສໍາລັບ "<*>” ແມ່ນໃຊ້ສໍາລັບສັນຍາລັກໄວຍາກອນທີ່ມີການປະກາດຢ່າງຈະແຈ້ງ
ແທັກປະເພດ semantic (ຜ່ານ "ປະເພດ");
·ລະຫັດສໍາລັບ "<>” ແມ່ນໃຊ້ ສຳ ລັບສັນຍາລັກໄວຍາກອນທີ່ບໍ່ມີ ຄຳ ສັບທີ່ປະກາດໄວ້
ພິມແທັກ.
ຄາດຫວັງ ຈໍານວນ
ບອກວ່າ yacc ຈໍານວນທີ່ຄາດໄວ້ຂອງການປ່ຽນແປງ / ຫຼຸດຜ່ອນຄວາມຂັດແຍ້ງ. ທີ່ເຮັດໃຫ້ມັນພຽງແຕ່
ລາຍງານຕົວເລກຖ້າມັນແຕກຕ່າງກັນ.
%expect-rr ຈໍານວນ
ບອກ yacc ຈໍານວນທີ່ຄາດວ່າຈະຫຼຸດລົງ / ຫຼຸດຜ່ອນຄວາມຂັດແຍ້ງ. ທີ່ເຮັດໃຫ້ມັນພຽງແຕ່
ລາຍງານຕົວເລກຖ້າມັນແຕກຕ່າງກັນ. ນີ້ແມ່ນ (ບໍ່ຄືກັບ bison) ທີ່ອະນຸຍາດໃຫ້ຢູ່ໃນຕົວວິເຄາະ LALR.
% ສະຖານທີ່
ບອກວ່າ yacc ເພື່ອເຮັດໃຫ້ການຄຸ້ມຄອງຂໍ້ມູນຕໍາແຫນ່ງທີ່ກ່ຽວຂ້ອງກັບແຕ່ລະຄົນ
token, ສະໜອງໃຫ້ໂດຍ lexer ໃນຕົວແປທົ່ວໂລກ yylloc, ຄ້າຍຄືກັນກັບການຄຸ້ມຄອງ
ຂອງຂໍ້ມູນມູນຄ່າ semantic ສະຫນອງໃຫ້ໃນ yylval.
ສໍາລັບຄ່າ semantic, ສະຖານທີ່ສາມາດອ້າງອີງພາຍໃນການປະຕິບັດໂດຍໃຊ້ @$ to
ອ້າງເຖິງສະຖານທີ່ຂອງສັນຍາລັກຊ້າຍມື, ແລະ @N (N integer) ເພື່ອອ້າງອີງ
ກັບສະຖານທີ່ຂອງຫນຶ່ງຂອງສັນຍາລັກເບື້ອງຂວາມື. ເຊັ່ນດຽວກັນສໍາລັບຄຸນຄ່າ semantic,
ເມື່ອກົດລະບຽບຖືກຈັບຄູ່, ການປະຕິບັດເລີ່ມຕົ້ນແມ່ນໃຊ້ໃນການຄິດໄລ່ສະຖານທີ່
ສະແດງໂດຍ @$ ເປັນຈຸດເລີ່ມຕົ້ນຂອງສັນຍາລັກທໍາອິດແລະຈຸດສຸດທ້າຍຂອງສຸດທ້າຍ
ສັນຍາລັກຢູ່ໃນເບື້ອງຂວາຂອງກົດລະບຽບ. ການຄິດໄລ່ເລີ່ມຕົ້ນນີ້ສາມາດເປັນ
overridden ໂດຍການມອບຫມາຍຢ່າງຊັດເຈນໃຫ້ @$ ໃນການປະຕິບັດກົດລະບຽບ.
ປະເພດຂອງ yylloc is YYLTYPE, ເຊິ່ງຖືກກໍານົດໂດຍຄ່າເລີ່ມຕົ້ນເປັນ:
typedef ໂຄງສ້າງ YYLTYPE {
int first_line;
int first_column;
int last_line;
int last_column;
} YYLTYPE;
YYLTYPE ຜູ້ໃຊ້ສາມາດກໍານົດຄືນໃຫມ່ໄດ້ (YYLTYPE_IS_DEFINED ຕ້ອງໄດ້ຮັບການກໍານົດ, ເພື່ອ
ຍັບຍັ້ງຄ່າເລີ່ມຕົ້ນ) ໃນສ່ວນການປະກາດຂອງເອກະສານສະເພາະ. ດັ່ງໃນ
bison, ມະຫາພາກ YYLLOC_DEFAULT ຖືກຮຽກຮ້ອງທຸກຄັ້ງທີ່ກົດຖືກຈັບຄູ່ເພື່ອຄິດໄລ່
ຕໍາແຫນ່ງສໍາລັບເບື້ອງຊ້າຍຂອງກົດລະບຽບ, ກ່ອນທີ່ຈະດໍາເນີນການທີ່ກ່ຽວຂ້ອງ
ປະຕິບັດ; ມະຫາພາກນີ້ສາມາດຖືກກຳນົດຄືນໂດຍຜູ້ໃຊ້.
ຄໍາສັ່ງນີ້ເພີ່ມ a YYLTYPE ພາລາມິເຕີເຖິງ yyerror()ທີ່ຢູ່ ຖ້າຫາກວ່າ %parser-parser
ຄໍາແນະນໍາແມ່ນມີຢູ່, a YYLTYPE ພາລາມິເຕີຖືກເພີ່ມໃສ່ yylex() ໂທ.
%lex-param { argument-ປະກາດ }
ໂດຍຄ່າເລີ່ມຕົ້ນ, lexer ຍອມຮັບບໍ່ມີພາລາມິເຕີ, ຕົວຢ່າງ, yylex(). ໃຊ້ຄໍາສັ່ງນີ້ເພື່ອ
ເພີ່ມການປະກາດພາລາມິເຕີສໍາລັບ lexer ຂອງທ່ານເອງ.
%parse-param { argument-ປະກາດ }
ໂດຍຄ່າເລີ່ມຕົ້ນ, parser ຍອມຮັບບໍ່ມີພາລາມິເຕີ, ຕົວຢ່າງ, yyparse(). ໃຊ້ຄໍາສັ່ງນີ້
ເພື່ອເພີ່ມການປະກາດພາລາມິເຕີສໍາລັບ parser ປັບແຕ່ງຂອງທ່ານ.
%parser-parser
ຕົວແປສ່ວນໃຫຍ່ (ນອກຈາກ yydebug ແລະ yynerrs) ຖືກຈັດສັນຢູ່ໃນ stack ພາຍໃນ
yyparse, ເຮັດໃຫ້ parser ສົມເຫດສົມຜົນ reentrant.
%token-table
ເຮັດໃຫ້ຊື່ຂອງຕົວວິເຄາະສໍາລັບ tokens ມີຢູ່ໃນ ຊື່ yyt array. ແນວໃດກໍ່ຕາມ, yacc
ບໍ່ໄດ້ກໍານົດ "$end", "$error" ຫຼື "$undefined" ໃນອາເຣນີ້.
ຄວາມເປັນເອກະລາດ
ຕາມທ່ານ Robert Corbett.
Berkeley Yacc ເປັນ ລລລ(1) parser generator. Berkeley Yacc ໄດ້ເຮັດ
ເຂົ້າກັນໄດ້ກັບ AT&T Yacc. Berkeley Yacc ສາມາດຍອມຮັບການປ້ອນຂໍ້ມູນໃດໆ
ຂໍ້ມູນສະເພາະທີ່ສອດຄ່ອງກັບເອກະສານ AT&T Yacc. ຂໍ້ມູນຈໍາເພາະ
ທີ່ໃຊ້ປະໂຫຍດຈາກຄຸນສົມບັດທີ່ບໍ່ມີເອກະສານຂອງ AT&T Yacc ອາດຈະເປັນ
ຖືກປະຕິເສດ.
ເຫດຜົນໃນ
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/yacc.html
ເອກະສານບາງຄຸນສົມບັດຂອງ AT&T yacc ທີ່ບໍ່ຈໍາເປັນສໍາລັບການປະຕິບັດຕາມ POSIX.
ທີ່ເວົ້າວ່າ, ທ່ານອາດຈະສົນໃຈໃນການໃຊ້ໄຟລ໌ໄວຍາກອນໃຫມ່ກັບການປະຕິບັດອື່ນໆ
ເຊິ່ງບໍ່ເຂົ້າກັນໄດ້ຢ່າງເຂັ້ມງວດກັບ AT&T yacc. ສໍາລັບຕົວຢ່າງ, ມີ bison. ນີ້ແມ່ນ
ຄວາມແຕກຕ່າງບໍ່ຫຼາຍປານໃດ:
· Yacc ຍອມຮັບເຄື່ອງໝາຍເທົ່າກັນກ່ອນເສັ້ນໂຄ້ງຊ້າຍຂອງຄຳສັ່ງ (ເຊັ່ນໃນ
ໄຟລ໌ໄວຍາກອນຕົ້ນສະບັບ ftp.y):
| STAT CRLF
= {
statcmd();
}
· Yacc ແລະ bison emit ລະຫັດໃນຄໍາສັ່ງທີ່ແຕກຕ່າງກັນ, ແລະໂດຍສະເພາະແມ່ນ bison ເຮັດໃຫ້ໄປຂ້າງຫນ້າ
ການອ້າງອີງເຖິງຫນ້າທີ່ທົ່ວໄປເຊັ່ນ yylex, yyparse ແລະ yyerror ໂດຍບໍ່ມີການສະຫນອງ
ຕົ້ນແບບ.
· ການສະຫນັບສະຫນູນຂອງ Bison ສໍາລັບ "% expect" ແມ່ນແຕກຢູ່ໃນຫຼາຍກວ່າຫນຶ່ງການປ່ອຍ. ສໍາລັບຜົນໄດ້ຮັບທີ່ດີທີ່ສຸດ
ການນໍາໃຊ້ bison, ລຶບຄໍາແນະນໍານັ້ນ.
· Bison ບໍ່ມີການທຽບເທົ່າສໍາລັບບາງສ່ວນຂອງ yaccຕົວເລືອກເສັ້ນຄໍາສັ່ງ, ອີງໃສ່
ຄໍາແນະນໍາທີ່ຝັງຢູ່ໃນໄຟລ໌ໄວຍາກອນ.
· Bison ຂອງ "-y” ທາງເລືອກບໍ່ມີຜົນກະທົບຕໍ່ການຂາດການສະຫນັບສະຫນູນຂອງ bison ສໍາລັບລັກສະນະຂອງ AT&T yacc
ຊຶ່ງຖືກຖືວ່າເປັນການລ້າສະໄໝ.
ທິດສະດີວິທະຍາ
ຖ້າມີກົດລະບຽບທີ່ບໍ່ເຄີຍຫຼຸດລົງ, ຈໍານວນຂອງກົດລະບຽບດັ່ງກ່າວໄດ້ຖືກລາຍງານ
ຄວາມຜິດພາດມາດຕະຖານ. ຖ້າມີ ລລລ(1) ຂໍ້ຂັດແຍ່ງ, ຈໍານວນຂອງຂໍ້ຂັດແຍ່ງໄດ້ຖືກລາຍງານ
ໃນຄວາມຜິດພາດມາດຕະຖານ.
ໃຊ້ byacc ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net