ภาษาอังกฤษภาษาฝรั่งเศสสเปน

Ad


ไอคอน Fav ของ OnWorks

yaccposix - ออนไลน์ในคลาวด์

เรียกใช้ yaccposix ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง yaccposix ที่สามารถเรียกใช้ในผู้ให้บริการโฮสติ้งฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


yacc — คอมไพเลอร์คอมไพเลอร์อีกตัวหนึ่ง (การพัฒนา)

เรื่องย่อ


ย๊าก [-dltv] [-ข file_prefix] [-หน้า sym_prefix] ไวยากรณ์

DESCRIPTION


พื้นที่ ย๊าก ยูทิลิตี้จะต้องอ่านคำอธิบายของไวยากรณ์ที่ปราศจากบริบทใน ไวยากรณ์ และเขียน C
ซอร์สโค้ด ซึ่งเป็นไปตามมาตรฐาน ISO C กับไฟล์โค้ด และตัวเลือกส่วนหัว
ข้อมูลลงในไฟล์ส่วนหัวในไดเร็กทอรีปัจจุบัน รหัสที่มาที่สร้างขึ้นจะต้อง
ไม่ขึ้นอยู่กับพฤติกรรมที่ไม่ได้กำหนด ไม่ระบุ หรือกำหนดการดำเนินการ ยกเว้นใน
กรณีที่คัดลอกโดยตรงจากไวยากรณ์ที่ให้มาหรือในกรณีที่เป็น
จัดทำเป็นเอกสารโดยการดำเนินการ รหัส C จะกำหนดฟังก์ชันและรูทีนที่เกี่ยวข้อง
และมาโครสำหรับหุ่นยนต์ที่รันอัลกอริธึมการแยกวิเคราะห์ที่ตรงตามข้อกำหนดใน
อัลกอริทึม.

รูปแบบและความหมายของไวยากรณ์มีอธิบายไว้ในส่วนคำอธิบายเพิ่มเติม

ซอร์สโค้ด C และไฟล์ส่วนหัวจะต้องสร้างในรูปแบบที่เหมาะสมสำหรับอินพุตสำหรับ C
คอมไพเลอร์ (ดู c99).

OPTIONS


พื้นที่ ย๊าก ยูทิลิตี้จะต้องสอดคล้องกับปริมาณคำจำกัดความพื้นฐานของ POSIX.1-2008 Section
12.2, ประโยชน์ วากยสัมพันธ์ แนวทางยกเว้นข้อ 9

รองรับตัวเลือกต่อไปนี้:

-ข file_prefix
ใช้ file_prefix แทน y เป็นคำนำหน้าสำหรับชื่อไฟล์เอาต์พุตทั้งหมด รหัส
ไฟล์ y.tab.c, ไฟล์ส่วนหัว y.tab.h (สร้างเมื่อ -ง ระบุไว้) และ
ไฟล์คำอธิบาย y.เอาท์พุท (สร้างเมื่อ -v ระบุไว้) ให้เปลี่ยนเป็น
file_prefix.tab.ค, file_prefix.tab.hและ file_prefix.เอาต์พุตตามลำดับ

-ง เขียนไฟล์ส่วนหัว โดยค่าเริ่มต้นจะเขียนเฉพาะไฟล์โค้ดเท่านั้น ดิ #กำหนด
คำสั่งเชื่อมโยงรหัสโทเค็นที่กำหนดโดย ย๊าก โดยผู้ใช้ประกาศ
ชื่อโทเค็น อนุญาตให้ใช้ไฟล์ต้นฉบับอื่นที่ไม่ใช่ y.tab.c เพื่อเข้าถึงโทเค็น
รหัส

-ล สร้างไฟล์โค้ดที่ไม่มีไฟล์ใดๆ #ไลน์ โครงสร้าง ถ้าตัวเลือกนี้
ไม่มีอยู่ ไม่ได้ระบุว่าไฟล์โค้ดหรือไฟล์ส่วนหัวมี
#ไลน์ คำสั่ง ควรใช้หลังจากไวยากรณ์และส่วนที่เกี่ยวข้องเท่านั้น
การกระทำถูกดีบั๊กอย่างสมบูรณ์

-หน้า sym_prefix
ใช้ sym_prefix แทน yy เป็นคำนำหน้าสำหรับชื่อภายนอกทั้งหมดที่ผลิตโดย
ย๊าก. ชื่อที่ได้รับผลกระทบจะต้องรวมถึงหน้าที่ ยีพาร์ส() วายเล็กซ์(), และ
ความผิดพลาด() และตัวแปร ยิลวาล, ยัยชาร์และ ยีเดบั๊ก. (ในส่วนที่เหลือของ
ส่วนนี้ หกสัญลักษณ์ที่อ้างถึงมีการอ้างอิงโดยใช้ชื่อเริ่มต้นของพวกเขา
เพื่อความสะดวกเท่านั้น) ชื่อท้องถิ่นอาจได้รับผลกระทบจาก -หน้า
ตัวเลือก; อย่างไรก็ตาม -หน้า ตัวเลือกจะไม่ส่งผลกระทบ #กำหนด สัญลักษณ์ที่สร้างขึ้นโดย
ย๊าก.

-t แก้ไขคำสั่งการคอมไพล์แบบมีเงื่อนไขเพื่ออนุญาตการรวบรวมการดีบัก
รหัสในไฟล์รหัส คำสั่งการดีบักรันไทม์จะต้องมีอยู่ใน .เสมอ
ไฟล์โค้ด แต่โดยดีฟอลต์คำสั่งการคอมไพล์ตามเงื่อนไขจะป้องกันไม่ให้
การรวบรวม.

-v เขียนไฟล์ที่มีคำอธิบายของ parser และรายงานข้อขัดแย้ง
เกิดจากความคลุมเครือในไวยากรณ์

ตัวดำเนินการ


ต้องใช้ตัวถูกดำเนินการต่อไปนี้:

ไวยากรณ์ ชื่อพาธของไฟล์ที่มีคำสั่ง ซึ่งต่อไปนี้จะเรียกว่า ไวยากรณ์สำหรับ
ซึ่งจะต้องสร้าง parser รูปแบบของไวยากรณ์อธิบายไว้ใน
ส่วนคำอธิบายเพิ่มเติม

STDIN


ไม่ได้ใช้.

INPUT ไฟล์


ไฟล์ ไวยากรณ์ จะเป็นไฟล์ข้อความที่มีรูปแบบตามที่ระบุใน EXTENDED DESCRIPTION
มาตรา.

และพวกเรา ตัวแปร


ตัวแปรสภาพแวดล้อมต่อไปนี้จะส่งผลต่อการดำเนินการของ ย๊าก:

ภาษา ระบุค่าเริ่มต้นสำหรับตัวแปรการทำให้เป็นสากลที่ไม่ได้ตั้งค่าหรือ
โมฆะ. (ดูปริมาณคำจำกัดความพื้นฐานของ POSIX.1-2008 Section 8.2,
สากล ตัวแปร เพื่อความเหนือกว่าของความเป็นสากล
ตัวแปรที่ใช้ในการกำหนดค่าของหมวดหมู่สถานที่)

LC_ALL หากตั้งค่าเป็นค่าสตริงที่ไม่ว่าง ให้แทนที่ค่าของค่าอื่นๆ ทั้งหมด
ตัวแปรความเป็นสากล

LC_CTYPE กำหนดสถานที่สำหรับการตีความลำดับไบต์ของข้อมูลข้อความ
เป็นอักขระ (เช่น ไบต์เดี่ยวเมื่อเทียบกับอักขระหลายไบต์ใน
อาร์กิวเมนต์และไฟล์อินพุต)

LC_MESSAGES
กำหนดโลแคลที่ควรใช้เพื่อส่งผลต่อรูปแบบและเนื้อหาของ
ข้อความวินิจฉัยที่เขียนถึงข้อผิดพลาดมาตรฐาน

นศ กำหนดตำแหน่งของแค็ตตาล็อกข้อความสำหรับการประมวลผลของ LC_MESSAGES.

พื้นที่ ภาษา และ แอลซี_* ตัวแปรส่งผลต่อการดำเนินการของ ย๊าก ยูทิลิตี้ตามที่ระบุไว้ ดิ หลัก()
ฟังก์ชั่นที่กำหนดไว้ใน ยัค ห้องสมุด จะโทร:

setlocale (LC_ALL, "")

และด้วยเหตุนี้โปรแกรมที่สร้างโดย ย๊าก ก็จะได้รับผลกระทบจากเนื้อหาเหล่านี้
ตัวแปรที่รันไทม์

อะซิงโครนัส กิจกรรม


ผิดนัด

STDOUT


ไม่ได้ใช้.

สแตเดอร์


หากตรวจพบข้อขัดแย้งกะ/ลดหรือลด/ลดข้อขัดแย้งใน ไวยากรณ์, ย๊าก จะเขียน
รายงานข้อขัดแย้งเหล่านั้นต่อข้อผิดพลาดมาตรฐานในรูปแบบที่ไม่ระบุ

ข้อผิดพลาดมาตรฐานจะต้องใช้สำหรับข้อความวินิจฉัย

เอาท์พุท ไฟล์


ไฟล์โค้ด ไฟล์ส่วนหัว และไฟล์คำอธิบายต้องเป็นไฟล์ข้อความ ทั้งหมดเป็น
อธิบายไว้ในส่วนต่อไปนี้

รหัส เนื้อไม่มีมัน
ไฟล์นี้จะต้องมีซอร์สโค้ด C สำหรับ ยีพาร์ส() การทำงาน. มันจะต้องมี
รหัสสำหรับการดำเนินการความหมายต่างๆ ที่มีการแทนที่มาโครที่ดำเนินการกับพวกเขาเป็น
อธิบายไว้ในส่วน EXTENDED DESCRIPTION และจะต้องมีสำเนาของ #กำหนด
คำสั่งในไฟล์ส่วนหัว ถ้า %ยูเนี่ยน การประกาศใช้การประกาศสำหรับ
YYSTYPE จะถูกรวมไว้ในไฟล์นี้ด้วย

ส่วนหัว เนื้อไม่มีมัน
ไฟล์ส่วนหัวจะต้องมี #กำหนด คำสั่งที่เชื่อมโยงหมายเลขโทเค็นกับ
ชื่อโทเค็น ซึ่งช่วยให้ซอร์สไฟล์อื่นๆ ที่ไม่ใช่ไฟล์โค้ดเข้าถึงรหัสโทเค็นได้
ถ้า %ยูเนี่ยน ใช้การประกาศ การประกาศสำหรับ YYSTYPE และ an extern ใช่ประเภท ยิลวาล
การประกาศจะรวมอยู่ในไฟล์นี้ด้วย

รายละเอียด เนื้อไม่มีมัน
ไฟล์คำอธิบายต้องเป็นไฟล์ข้อความที่มีรายละเอียดของเครื่องสถานะ
สอดคล้องกับ parser โดยใช้รูปแบบที่ไม่ระบุ ข้อจำกัดสำหรับตารางภายใน (ดู
ข้อ จำกัด) จะต้องรายงานในลักษณะที่กำหนดไว้ในการดำเนินการด้วย (การใช้งานบางส่วน
อาจใช้เทคนิคการจัดสรรแบบไดนามิกและไม่มีค่าจำกัดเฉพาะในการรายงาน)

ขยาย DESCRIPTION


พื้นที่ ย๊าก คำสั่งยอมรับภาษาที่ใช้กำหนดไวยากรณ์สำหรับภาษาเป้าหมาย
ที่จะแยกวิเคราะห์โดยตารางและรหัสที่สร้างโดย ย๊าก. ภาษาที่ . ยอมรับ ย๊าก เป็น
ไวยากรณ์สำหรับภาษาเป้าหมายอธิบายไว้ด้านล่างโดยใช้เครื่องหมาย ย๊าก ภาษาอินพุตเอง

อินพุต ไวยากรณ์ รวมถึงกฎที่อธิบายโครงสร้างการป้อนข้อมูลของภาษาเป้าหมายและ
รหัสที่จะเรียกใช้เมื่อกฎเหล่านี้ได้รับการยอมรับเพื่อให้ความหมายที่เกี่ยวข้อง
หนังบู๊. รหัสที่จะดำเนินการจะปรากฏเป็นส่วนของข้อความที่ตั้งใจให้เป็น C-
รหัสภาษา เนื้อหาของข้อความเหล่านี้จะต้องไม่มีไตรกราฟภาษาซี ภาษาซี
การรวมจะถือว่าสร้างฟังก์ชันที่ถูกต้องเมื่อประมวลผลโดย ย๊าก สู่ผลลัพธ์
ไฟล์. รหัสที่รวมอยู่ในวิธีนี้จะต้องดำเนินการในระหว่างการรับรู้ของ
ภาษาเป้าหมาย.

ให้ไวยากรณ์ the ย๊าก ยูทิลิตี้สร้างไฟล์ที่อธิบายไว้ใน OUTPUT FILES
ส่วน. ไฟล์โค้ดสามารถคอมไพล์และเชื่อมโยงได้โดยใช้ c99. หากการประกาศและ
ส่วนโปรแกรมของไฟล์ไวยากรณ์ไม่มีคำจำกัดความของ หลัก() วายเล็กซ์(), และ
ความผิดพลาด() เอาต์พุตที่คอมไพล์ต้องเชื่อมโยงกับเวอร์ชันที่จัดหาจากภายนอก
ฟังก์ชั่น. เวอร์ชันเริ่มต้นของ หลัก() และ ความผิดพลาด() มีให้ใน ย๊าก ห้องสมุดและ
สามารถเชื่อมโยงได้โดยใช้ปุ่ม -ล y ตัวถูกดำเนินการไปยัง c99. ย๊าก ไม่จำเป็นต้องมีอินเทอร์เฟซห้องสมุด
รองรับอินเทอร์เฟซอื่นที่ไม่ใช่ค่าเริ่มต้น yy คำนำหน้าสัญลักษณ์ แอปพลิเคชันให้
ฟังก์ชันวิเคราะห์คำศัพท์ วายเล็กซ์(); ที่ ไฟแนนเชี่ ยูทิลิตี้ได้รับการออกแบบมาโดยเฉพาะเพื่อ
สร้างกิจวัตรดังกล่าว

อินพุต ภาษา
แอปพลิเคชันต้องตรวจสอบให้แน่ใจว่าทุกไฟล์ข้อมูลจำเพาะประกอบด้วยสามส่วนใน
ใบสั่ง: ประกาศ, ไวยากรณ์ กฎระเบียบและ โปรแกรม, คั่นด้วย ดับเบิ้ล
ตัวอักษร ("%%"). การประกาศและส่วนโปรแกรมสามารถเว้นว่างไว้ได้ ถ้าอย่างหลังคือ
ว่างเปล่าก่อนหน้า "%%" เครื่องหมายแยกจากส่วนกฎสามารถละเว้นได้

อินพุตเป็นข้อความรูปแบบอิสระตามโครงสร้างของไวยากรณ์ที่กำหนดไว้ด้านล่าง

คำศัพท์ โครงสร้าง of ไวยากรณ์
ดิ , , และ อักขระจะถูกละเว้น ยกเว้นว่า
แอปพลิเคชันจะต้องตรวจสอบให้แน่ใจว่าไม่ปรากฏในชื่อหรือสงวนอักขระหลายตัว
สัญลักษณ์ ข้อคิดเห็นอยู่ใน "/* ... */"และสามารถปรากฏได้ทุกที่ที่มีชื่อ
ถูกต้อง.

ชื่อมีความยาวตามใจชอบ ประกอบด้วยตัวอักษร จุด ('.') ขีดล่าง ('_'), และ
ไม่ใช่ตัวเลขเริ่มต้น ตัวอักษรตัวพิมพ์ใหญ่และตัวพิมพ์เล็กมีความแตกต่างกัน สอดคล้องกับการใช้งาน
จะไม่ใช้ชื่อที่ขึ้นต้นด้วย yy or YY ตั้งแต่ ย๊าก parser ใช้ชื่อดังกล่าว มากมาย
ชื่อปรากฏในผลลัพธ์สุดท้ายของ ย๊ากและดังนั้นจึงควรเลือกให้สอดคล้อง
ด้วยกฎเพิ่มเติมใด ๆ ที่สร้างขึ้นโดยคอมไพเลอร์ C ที่จะใช้ โดยเฉพาะอย่างยิ่งพวกเขาปรากฏตัว
in #กำหนด งบ

ตัวอักษรต้องประกอบด้วยอักขระตัวเดียวที่อยู่ในเครื่องหมายคำพูดเดียว ทั้งหมดของ
ลำดับหลีกที่รองรับค่าคงที่อักขระตามมาตรฐาน ISO C จะเป็น
สนับสนุนโดย ย๊าก.

ความสัมพันธ์กับเครื่องวิเคราะห์คำศัพท์มีรายละเอียดด้านล่าง

แอปพลิเคชันต้องแน่ใจว่าอักขระ NUL ไม่ได้ใช้ในกฎไวยากรณ์หรือ
ตัวอักษร

การประกาศ Section
ส่วนการประกาศใช้เพื่อกำหนดสัญลักษณ์ที่ใช้ในการกำหนดภาษาเป้าหมาย
และความสัมพันธ์ระหว่างกัน โดยเฉพาะข้อมูลเพิ่มเติมมากมาย
จำเป็นในการแก้ไขความกำกวมในไวยากรณ์ที่ไม่มีบริบทสำหรับภาษาเป้าหมายคือ
ให้ที่นี่

มักจะ ย๊าก กำหนดความสัมพันธ์ระหว่างชื่อสัญลักษณ์ที่สร้างและของพวกเขา
ค่าตัวเลขพื้นฐาน ส่วนการประกาศทำให้สามารถควบคุม
การกำหนดค่าเหล่านี้

นอกจากนี้ยังสามารถเก็บข้อมูลเชิงความหมายที่เกี่ยวข้องกับโทเค็นที่อยู่บน
parse stack ในภาษา C ที่ผู้ใช้กำหนด สหภาพ, หากสมาชิกของสหภาพเป็น
เกี่ยวข้องกับชื่อต่าง ๆ ในไวยากรณ์ ส่วนการประกาศให้ไว้สำหรับ
นี้เช่นกัน

ผู้ประกาศกลุ่มแรกด้านล่างทั้งหมดใช้รายชื่อเป็นอาร์กิวเมนต์ รายการนั้นสามารถ
จะเลือกนำหน้าด้วยชื่อของสมาชิกสหภาพ C (เรียกว่า a แท็ก ด้านล่าง) ปรากฏ
ภายใน '<' และ '>'. (เป็นข้อยกเว้นสำหรับข้อตกลงในการพิมพ์ส่วนที่เหลือของสิ่งนี้
ปริมาณของ POSIX.1–2008 ในกรณีนี้แท็ก> ไม่ได้เป็นตัวแทนของ metavariable แต่
อักขระวงเล็บมุมตามตัวอักษรล้อมรอบสัญลักษณ์) การใช้ แท็ก ระบุว่า
โทเค็นที่มีชื่ออยู่ในบรรทัดนี้ต้องเป็นประเภท C เดียวกันกับสมาชิกสหภาพที่อ้างอิงโดย
แท็ก. นี้จะกล่าวถึงในรายละเอียดเพิ่มเติมด้านล่าง

สำหรับรายการที่ใช้กำหนดโทเค็น การปรากฏตัวครั้งแรกของโทเค็นที่กำหนดสามารถตามด้วย
จำนวนเต็มบวก (เป็นสตริงของตัวเลขทศนิยม) หากทำเช่นนี้ ค่าพื้นฐาน
ที่กำหนดให้เพื่อวัตถุประสงค์ด้านคำศัพท์ให้ถือเป็นตัวเลขนั้น

ต่อไปนี้ประกาศ ชื่อ เพื่อเป็นโทเค็น:

โทเค็น% [<แท็ก>] ชื่อ [จำนวน] [ชื่อ [จำนวน]]...

If แท็ก มีอยู่ ให้ประกาศประเภท C สำหรับโทเค็นทั้งหมดในบรรทัดนี้ว่าเป็นประเภท
อ้างอิงโดย แท็ก. หากเป็นจำนวนเต็มบวก จำนวน, ตาม ชื่อค่านั้นจะเป็น
กำหนดให้กับโทเค็น

ต่อไปนี้ประกาศ ชื่อ เป็นโทเค็นและกำหนดลำดับความสำคัญให้กับมัน:

%ซ้าย [<แท็ก>] ชื่อ [จำนวน] [ชื่อ [จำนวน]]...
%ขวา [<แท็ก>] ชื่อ [จำนวน] [ชื่อ [จำนวน]]...

สามารถปรากฏในส่วนนี้ได้ตั้งแต่หนึ่งบรรทัดขึ้นไป โดยแต่ละบรรทัดขึ้นต้นด้วยสัญลักษณ์เหล่านี้
โทเค็นทั้งหมดในบรรทัดเดียวกันมีระดับความสำคัญและการเชื่อมโยงเดียวกัน เส้น
อยู่ในลำดับความสำคัญที่เพิ่มขึ้นหรือความแข็งแรงในการยึดเกาะ %ซ้าย แสดงว่า
โอเปอเรเตอร์ในบรรทัดนั้นถูกปล่อยให้เชื่อมโยงกันและ %ขวา ในทำนองเดียวกันแสดงว่าถูกต้อง
ตัวดำเนินการเชื่อมโยง ถ้า แท็ก มีอยู่ก็จะประกาศประเภท C สำหรับ ชื่อตามที่อธิบายไว้
for โทเค็น%.

ต่อไปนี้ประกาศ ชื่อ เพื่อเป็นสัญลักษณ์และแสดงว่าสิ่งนี้ใช้ไม่ได้
เชื่อมโยง:

% nonassoc [<แท็ก>] ชื่อ [จำนวน] [ชื่อ [จำนวน]]...

หาก parser พบการใช้โทเค็นนี้ที่เชื่อมโยงกัน จะรายงานข้อผิดพลาด ถ้า แท็ก is
ปัจจุบันให้ประกาศประเภท C สำหรับ ชื่อตามที่อธิบายไว้สำหรับ โทเค็น%.

ดังต่อไปนี้ สมาชิกสหภาพแรงงาน ชื่อs ไม่ใช่เทอร์มินัลจึงจำเป็น
ที่จะมี แท็ก ฟิลด์ที่จุดเริ่มต้น:

%พิมพ์ <แท็ก> ชื่อ...

เพราะมันเกี่ยวข้องกับเทอร์มินัลที่ไม่ใช่เท่านั้น การกำหนดหมายเลขโทเค็น หรือใช้ตัวอักษรis
ยังห้าม ถ้าสิ่งปลูกสร้างนี้มีอยู่ ย๊าก จะต้องดำเนินการตรวจสอบประเภท ถ้านี้
ไม่มีโครงสร้าง สแต็ค parse จะเก็บเฉพาะ int ชนิด

ทุกชื่อที่ใช้ใน ไวยากรณ์ ไม่ได้กำหนดโดย โทเค็น%, %ซ้าย, %ขวา,หรือ % nonassoc
การประกาศจะถือว่าเป็นตัวแทนของสัญลักษณ์ที่ไม่ใช่เทอร์มินัล ดิ ย๊าก ยูทิลิตี้จะต้องรายงาน
ข้อผิดพลาดสำหรับสัญลักษณ์ที่ไม่ใช่เทอร์มินัลที่ไม่ปรากฏทางด้านซ้ายของอย่างน้อยหนึ่ง
กฎไวยากรณ์

เมื่อระบุประเภท ลำดับความสำคัญ หรือหมายเลขโทเค็นของชื่อแล้ว จะต้องไม่
เปลี่ยน. หากการประกาศโทเค็นครั้งแรกไม่ได้กำหนดหมายเลขโทเค็น ย๊าก จะต้อง
กำหนดหมายเลขโทเค็น เมื่อทำการมอบหมายนี้แล้วจะไม่สามารถเปลี่ยนหมายเลขโทเค็นได้
โดยมอบหมายให้ชัดเจน

ผู้ประกาศต่อไปนี้ไม่เป็นไปตามรูปแบบก่อนหน้า

ต่อไปนี้ประกาศ non-terminal ชื่อ ที่จะเป็น เริ่มต้น เครื่องหมายซึ่งแสดงถึง
โครงสร้างที่ใหญ่ที่สุดและกว้างที่สุดที่อธิบายโดยกฎไวยากรณ์:

%เริ่ม ชื่อ

โดยค่าเริ่มต้น จะเป็นด้านซ้ายมือของกฎไวยากรณ์ข้อแรก ค่าเริ่มต้นนี้สามารถ
แทนที่ด้วยการประกาศนี้

ต่อไปนี้ประกาศว่า ย๊าก คุณค่าที่รวมกันเป็นหนึ่งเดียวของค่านิยมประเภทต่างๆ
ต้องการ

%ยูเนี่ยน { ร่างกาย of สหภาพ (in C)}

เนื้อหาของสหภาพจะต้องไม่มีโทเค็นการประมวลผลล่วงหน้าของวงเล็บปีกกาที่ไม่สมดุล

โดยค่าเริ่มต้น ค่าที่ส่งคืนโดยการกระทำ (ดูด้านล่าง) และตัววิเคราะห์คำศัพท์จะเป็น
ประเภท int. ย๊าก ยูทิลิตี้ติดตามประเภทและจะแทรกที่สอดคล้องกัน
ชื่อสมาชิกสหภาพเพื่อดำเนินการตรวจสอบประเภทที่เข้มงวดของ parser ที่เป็นผลลัพธ์

อีกทางหนึ่ง กำหนดว่าอย่างน้อยหนึ่งแท็ก> ใช้โครงสร้างสามารถประกาศสหภาพได้
ในไฟล์ส่วนหัว (ซึ่งจะรวมอยู่ในส่วนการประกาศโดยใช้a #include
สร้างภายใน %{ และ %}) และ a พิมพ์ดีฟ ใช้เพื่อกำหนดสัญลักษณ์ YYSTYPE เพื่อเป็นตัวแทน
สหภาพนี้ ผลกระทบของ %ยูเนี่ยน คือการให้การประกาศ YYSTYPE โดยตรงจาก
ย๊าก อินพุต

การประกาศและคำจำกัดความภาษาซีสามารถปรากฏในส่วนการประกาศที่แนบมาด้วย
โดยเครื่องหมายดังต่อไปนี้

%{ ... %}

คำสั่งเหล่านี้จะถูกคัดลอกลงในไฟล์โค้ดและมีขอบเขตทั่วโลกอยู่ภายในดังนั้น
ที่สามารถนำไปใช้ในกฎเกณฑ์และส่วนของโปรแกรมได้ ข้อความต้องไม่มี
"%}" นอกข้อคิดเห็น สตริงตามตัวอักษร หรือค่าคงที่หลายอักขระ

แอปพลิเคชันจะต้องตรวจสอบให้แน่ใจว่าส่วนการประกาศถูกยกเลิกโดยโทเค็น %%.

ไวยากรณ์ กฎระเบียบ in ย๊าก
ส่วนกฎกำหนดไวยากรณ์แบบไม่มีบริบทที่จะยอมรับโดยฟังก์ชัน ย๊าก
สร้างและเชื่อมโยงกับกฎเหล่านั้น การกระทำของภาษาซี และลำดับความสำคัญเพิ่มเติม
ข้อมูล. ไวยากรณ์อธิบายไว้ด้านล่าง และคำจำกัดความที่เป็นทางการมีดังนี้

ส่วนกฎประกอบด้วยกฎไวยากรณ์ตั้งแต่หนึ่งกฎขึ้นไป กฎไวยากรณ์มีรูปแบบ:

A : ร่างกาย ;

สัญลักษณ์ A หมายถึงชื่อที่ไม่ใช่เทอร์มินัลและ ร่างกาย แทนลำดับของศูนย์หรือ
ข้อมูลเพิ่มเติม ชื่อs, ตามตัวอักษร, และ ความหมาย การกระทำที่สามารถตามด้วยตัวเลือก
ลำดับความสำคัญ กฎส. เฉพาะชื่อและตัวอักษรเท่านั้นที่มีส่วนร่วมในการก่อตัวของ
ไวยากรณ์; การกระทำเชิงความหมายและกฎลำดับความสำคัญถูกใช้ในลักษณะอื่น ดิ และ
ที่ เป็น ย๊าก เครื่องหมายวรรคตอน หากมีกฎไวยากรณ์ที่ต่อเนื่องกันหลายข้อกับ
ทางซ้ายมือเดียวกัน the ('|') สามารถใช้เพื่อหลีกเลี่ยงการเขียนซ้ำ
ด้านซ้ายมือ; ในกรณีนี้ ปรากฏหลังกฎสุดท้ายเท่านั้น ร่างกาย
ส่วนหนึ่งสามารถว่างเปล่า (หรือว่างเปล่าของชื่อและตัวอักษร) เพื่อระบุว่าไม่ใช่เทอร์มินัล
สัญลักษณ์ตรงกับสตริงว่าง

พื้นที่ ย๊าก ยูทิลิตี้กำหนดหมายเลขเฉพาะให้กับแต่ละกฎ กฎการใช้แถบแนวตั้ง
สัญกรณ์เป็นกฎที่ชัดเจน หมายเลขที่กำหนดให้กับกฎจะปรากฏในคำอธิบาย
ไฟล์

องค์ประกอบที่ประกอบด้วย BODY คือ:

ชื่อ, ตามตัวอักษร
สิ่งเหล่านี้เป็นกฎของไวยากรณ์: ชื่อ เป็นอย่างใดอย่างหนึ่ง โทเค็น หรือ ไม่ใช่เทอร์มินัล;
ตามตัวอักษร ย่อมาจากตัวมันเอง (น้อยกว่าเครื่องหมายคำพูดที่จำเป็น)

ความหมาย การกระทำ
ด้วยกฎไวยากรณ์แต่ละข้อ ผู้ใช้สามารถเชื่อมโยงการกระทำที่ต้องทำในแต่ละครั้ง
กฎได้รับการยอมรับในกระบวนการป้อนข้อมูล (โปรดทราบว่าคำว่า ``การกระทำ'' สามารถ
ยังอ้างถึงการดำเนินการของ parser—shift, reduce และอื่นๆ)

การกระทำเหล่านี้สามารถส่งคืนค่าและรับค่าที่ส่งกลับโดยก่อนหน้า
การกระทำ ค่าเหล่านี้ถูกเก็บไว้ในวัตถุประเภท YYSTYPE (ดู %ยูเนี่ยน)
ค่าผลลัพธ์ของการกระทำจะถูกเก็บไว้ในกอง parse ด้วยมือซ้าย
ด้านข้างของกฎที่จะเข้าถึงได้โดยการลดอื่น ๆ โดยเป็นส่วนหนึ่งของมือขวา
ด้านข้าง. โดยใช้แท็ก> ข้อมูลที่ให้ไว้ในส่วนการประกาศ the
รหัสที่สร้างโดย ย๊าก สามารถตรวจสอบพิมพ์ได้อย่างเคร่งครัดและกำหนดโดยพลการ
ข้อมูล. นอกจากนี้ เครื่องวิเคราะห์คำศัพท์สามารถให้ . ชนิดเดียวกันได้
ค่าสำหรับโทเค็น หากต้องการ

การกระทำคือคำสั่ง C โดยพลการ ดังนั้นจึงสามารถทำอินพุตหรือเอาต์พุตได้ call
โปรแกรมย่อย และแก้ไขตัวแปรภายนอก การกระทำคือคำสั่ง C หนึ่งคำสั่งขึ้นไป
อยู่ในวงเล็บปีกกา '{' และ '}'. ข้อความต้องไม่มี
โทเค็นการประมวลผลล่วงหน้าของวงเล็บปีกกาที่ไม่สมดุล

ตัวแปรเทียมบางตัวสามารถนำมาใช้ในการดำเนินการได้ เหล่านี้เป็นมาโครสำหรับการเข้าถึง
กับโครงสร้างข้อมูลที่รู้จักภายในถึง ย๊าก.

$$ ค่าของการกระทำสามารถกำหนดได้โดยการกำหนดให้ $$ ถ้าพิมพ์
เปิดใช้งานการตรวจสอบและไม่สามารถกำหนดประเภทของค่าที่จะ
พิจารณาแล้ว อาจมีการสร้างข้อความวินิจฉัย

$จำนวน หมายถึงค่าที่ส่งคืนโดยส่วนประกอบที่ระบุโดย
โทเค็น จำนวน ที่ด้านขวาของกฎ โดยอ่านจากซ้ายไปขวา
จำนวน สามารถเป็นศูนย์หรือลบ ถ้า จำนวน เป็นศูนย์หรือเป็นลบก็
หมายถึงข้อมูลที่เกี่ยวข้องกับชื่อบน stack ของ parser
นำหน้าสัญลักษณ์ซ้ายสุดของกฎปัจจุบัน (นั่นคือ, "$0"
หมายถึงชื่อที่อยู่ข้างหน้าชื่อซ้ายสุดใน
กฎปัจจุบันที่จะพบในสแต็กของ parser และ "$-1" หมายถึง
สัญลักษณ์ของ ของมัน ซ้าย) ถ้า จำนวน หมายถึงองค์ประกอบที่อยู่เหนือกระแส
ชี้ไปที่กฎหรืออยู่เหนือด้านล่างของสแต็ก ผลลัพธ์คือ
ไม่ได้กำหนด. หากเปิดใช้งานการตรวจสอบประเภทและประเภทของค่าที่จะ
ไม่สามารถกำหนดได้ อาจมีการสร้างข้อความวินิจฉัย

$<แท็ก>จำนวน
สิ่งเหล่านี้สอดคล้องกับสัญลักษณ์ที่เกี่ยวข้องโดยไม่มี แท็ก
รวม แต่อนุญาตให้มีการตรวจสอบประเภทที่เข้มงวด (และป้องกันไม่ให้ไม่ต้องการ
การแปลงประเภท) เอฟเฟกต์คือขยายมาโครเพื่อใช้ แท็ก
เพื่อเลือกองค์ประกอบจากสหภาพ YYSTYPE (โดยใช้ dataname.tag).
สิ่งนี้มีประโยชน์อย่างยิ่งหาก จำนวน ไม่เป็นบวก

$<แท็ก>$ สิ่งนี้กำหนดในการอ้างอิงถึงประเภทของสมาชิกสหภาพที่อ้างอิง
by แท็ก. โครงสร้างนี้ใช้เมื่ออ้างอิงไปทางซ้าย
ค่าบริบทเกิดขึ้นในไวยากรณ์และให้ ย๊าก ด้วยวิธีการ
สำหรับการเลือกประเภท

การดำเนินการสามารถเกิดขึ้นได้ทุกที่ในกฎ (ไม่ใช่แค่ในตอนท้าย) การกระทำสามารถเข้าถึงได้
ค่าที่ส่งคืนโดยการกระทำทางด้านซ้าย และในทางกลับกัน ค่าที่ส่งกลับอาจเป็น
เข้าถึงได้โดยการดำเนินการทางด้านขวา การกระทำที่ปรากฏตรงกลางกฎ
จะเทียบเท่ากับการแทนที่การกระทำด้วยสัญลักษณ์ใหม่ที่ไม่ใช่เทอร์มินัลและ
เพิ่มกฎว่างด้วยสัญลักษณ์ที่ไม่ใช่เทอร์มินัลทางด้านซ้ายมือ ดิ
ความหมายที่เกี่ยวข้องกับกฎใหม่ให้เทียบเท่ากับต้นฉบับ
หนังบู๊. การใช้การกระทำภายในกฎอาจก่อให้เกิดความขัดแย้งที่จะไม่
อย่างอื่นมีอยู่

โดยค่าเริ่มต้น ค่าของกฎจะเป็นค่าขององค์ประกอบแรกในนั้น
หากองค์ประกอบแรกไม่มีประเภท (โดยเฉพาะในกรณีของ a
ตามตัวอักษร) และเปิดการตรวจสอบประเภทโดย %พิมพ์, ข้อความแสดงข้อผิดพลาดจะส่งผลให้

ลำดับความสำคัญ
คีย์เวิร์ด % ความแม่นยำ สามารถใช้เพื่อเปลี่ยนระดับความสำคัญที่เกี่ยวข้องกับa
กฎไวยากรณ์เฉพาะ ตัวอย่างของสิ่งนี้คือในกรณีที่ unary และ binary
โอเปอเรเตอร์มีการแสดงสัญลักษณ์เหมือนกัน แต่ต้องกำหนดให้แตกต่างกัน
ลำดับความสำคัญหรือในกรณีที่การจัดการโครงสร้าง if-else ที่คลุมเครือคือ
จำเป็น. สัญลักษณ์สงวน % ความแม่นยำ สามารถปรากฏขึ้นทันทีหลังจากร่างกายของ
กฎไวยากรณ์และสามารถตามด้วยชื่อโทเค็นหรือตัวอักษร มันจะ
ทำให้ลำดับความสำคัญของกฎไวยากรณ์กลายเป็นโทเค็นต่อไปนี้
ชื่อหรือตัวอักษร การดำเนินการสำหรับกฎโดยรวมสามารถปฏิบัติตามได้ % ความแม่นยำ.

ถ้าส่วนของโปรแกรมเป็นไปตามนั้น การสมัครต้องแน่ใจว่ากฎไวยากรณ์นั้น
สิ้นสุดโดย %%.

โปรแกรม Section
พื้นที่ โปรแกรม ส่วนสามารถรวมคำจำกัดความของเครื่องวิเคราะห์ศัพท์ วายเล็กซ์() และอะไรก็ได้
ฟังก์ชั่นอื่น ๆ ตัวอย่างเช่น ที่ใช้ในการดำเนินการที่ระบุในกฎไวยากรณ์ มัน
ไม่ได้ระบุว่าส่วนโปรแกรมนำหน้าหรือตามการกระทำเชิงความหมายใน
ไฟล์ที่ส่งออก; ดังนั้นหากแอปพลิเคชันมีคำจำกัดความของมาโครและ
ประกาศที่ตั้งใจจะใช้รหัสในการดำเนินการความหมายก็จะวางไว้
ภายใน "%{ ... %}" ในส่วนการประกาศ

อินพุต ไวยากรณ์
ข้อมูลต่อไปนี้ไปยัง ย๊าก ให้ parser สำหรับการป้อนข้อมูลไปยัง ย๊าก. ไวยากรณ์ที่เป็นทางการนี้
มีความสำคัญเหนือกว่าคำอธิบายไวยากรณ์ข้อความก่อนหน้า

โครงสร้างคำศัพท์ถูกกำหนดให้แม่นยำน้อยกว่า คำศัพท์ โครงสร้าง of ไวยากรณ์ กำหนด
เงื่อนไขส่วนใหญ่ ความสอดคล้องระหว่างข้อกำหนดก่อนหน้าและโทเค็นด้านล่างเป็น
ดังต่อไปนี้

ตัวระบุ ซึ่งสอดคล้องกับแนวคิดของ ชื่อให้ไว้ก่อนหน้านี้ รวมถึง
อักษรตามที่กำหนดไว้ก่อนหน้านี้

C_IDENTIFIER
นี่คือชื่อและเป็นที่รู้จักกันว่าตามด้วย . อา
ตัวอักษรไม่สามารถให้โทเค็นนี้

จำนวน สตริงของตัวเลข (จำนวนเต็มทศนิยมไม่เป็นลบ)

ประเภท, LEFT, เครื่องหมาย, LCURL, RCURL
เหล่านี้ตรงโดยตรงกับ %พิมพ์, %ซ้าย, %%, %{และ %}.

{ ... } นี่ระบุซอร์สโค้ดภาษา C โดยอาจรวม '$'
มาโครตามที่กล่าวไว้ก่อนหน้านี้

/* ไวยากรณ์ for อินพุต ไปยัง ยัค */
/* ขั้นพื้นฐาน รายการ. */
/* พื้นที่ ดังต่อไปนี้ เป็น ได้รับการยอมรับ by คำศัพท์ เครื่องวิเคราะห์ */

%token IDENTIFIER /* รวมตัวระบุและตัวอักษร */
%token C_IDENTIFIER /* ตัวระบุ (แต่ไม่ใช่ตัวอักษร)
ตามด้วย :. */
% โทเค็น NUMBER /* [0-9][0-9]* */

/* คำสงวน : %type=>TYPE %left=>LEFT และอื่นๆ */

%token ซ้าย ขวา ไม่ใช่ TOKEN PREC ประเภท START UNION

%token MARK /* เครื่องหมาย %% */
%token LCURL /* เครื่องหมาย %{ */
%token RCURL /* เครื่องหมาย %} */

/* อักษร 8 บิตแทนตัวมันเอง; */
/* ต้องกำหนดโทเค็นสำหรับอักขระหลายไบต์ */

%เริ่มต้นข้อมูลจำเพาะ

%%

spec : defs MARK rule tail
;
หาง : MARK
{
/* ในการดำเนินการนี้ ให้ตั้งค่าส่วนที่เหลือของไฟล์ */
}
| /* ว่างเปล่า; MARK ที่สองเป็นทางเลือก */
;
defs : /* ว่างเปล่า */
- defs def
;
def : เริ่มตัวระบุ
| ยูเนี่ยน
{
/* คัดลอกคำจำกัดความของสหภาพไปยังเอาต์พุต */
}
- LCURL
{
/* คัดลอกรหัส C ไปยังไฟล์ที่ส่งออก */
}
RCURL
| rword แท็ก nlist
;
rword : โทเค็น
| ซ้าย
| ขวา
| นนสซ
| พิมพ์
;
tag : /* Empty: union tag ID เป็นทางเลือก */
| '<' ตัวระบุ '>'
;
nlist : นาโนเมตร
| รายการ nmno
;
nmno : IDENTIFIER /* หมายเหตุ: ตัวอักษรไม่ถูกต้องโดยมี % type */
| หมายเลขประจำตัว /* หมายเหตุ: ไม่ถูกต้องกับประเภท % */
;

/* ส่วนกฎ */

กฎ : C_IDENTIFIER rbody prec
| กฎ กฎ
;
กฎ : C_IDENTIFIER rbody prec
| '|' rbody prec
;
rbody : /* ว่าง */
| IDENTIFIER
| การกระทำของร่างกาย
;
กระทำ : '{'
{
/* คัดลอกการดำเนินการ แปล $$ เป็นต้น */
}
'}'
;
prec : /* ว่าง */
| PREC ตัวระบุ
| PREC IDENTIFIER พระราชบัญญัติ
| ล่วงหน้า ';'
;

ความขัดแย้ง
ตัวแยกวิเคราะห์ที่สร้างขึ้นสำหรับไวยากรณ์อินพุตอาจมีสถานะที่เกิดข้อขัดแย้ง ดิ
ความขัดแย้งเกิดขึ้นเพราะไวยากรณ์ไม่ใช่ ลลล(1). ไวยากรณ์ที่คลุมเครือเสมอประกอบด้วย
อย่างน้อยหนึ่ง ลลล(1) ความขัดแย้ง ดิ ย๊าก ยูทิลิตี้จะแก้ไขข้อขัดแย้งทั้งหมดโดยใช้
กฎเริ่มต้นหรือกฎลำดับความสำคัญที่ผู้ใช้ระบุ

ความขัดแย้งคือการเปลี่ยนแปลง/ลดความขัดแย้ง หรือลด/ลดความขัดแย้ง กะ/ลด
ความขัดแย้งเป็นที่สำหรับสถานะที่กำหนดและสัญลักษณ์มองไปข้างหน้าทั้งการกระทำกะและ
ลดการกระทำเป็นไปได้ ลด/ลดความขัดแย้งเป็นที่สำหรับรัฐที่กำหนดและ
สัญลักษณ์ Lookahead สามารถลดลงได้สองกฎที่แตกต่างกัน

กฎด้านล่างอธิบายวิธีการระบุการดำเนินการเมื่อเกิดข้อขัดแย้ง ไม่
ข้อขัดแย้งของ shift/reduce ทั้งหมดสามารถแก้ไขได้ด้วยวิธีนี้ เนื่องจากข้อขัดแย้งอาจ
เกิดจากสิ่งอื่นที่ไม่ใช่ความกำกวม ดังนั้นการใช้สิ่งอำนวยความสะดวกเหล่านี้อย่างระวังอาจก่อให้เกิด
ภาษาที่ parser ยอมรับจะแตกต่างจากที่ตั้งใจไว้มาก ดิ
ไฟล์คำอธิบายต้องมีข้อมูลที่เพียงพอเพื่อทำความเข้าใจสาเหตุของ
ขัดแย้ง. โดยที่ความกำกวมเป็นสาเหตุให้กฎเริ่มต้นหรือกฎที่ชัดเจนควรเป็น
เพียงพอที่จะผลิต parser ที่ใช้งานได้

ลำดับความสำคัญและการเชื่อมโยงที่ประกาศไว้ (ดู การประกาศ Section) ใช้เพื่อ
แก้ไขข้อขัดแย้งในการแยกวิเคราะห์ดังนี้:

1. ลำดับความสำคัญและการเชื่อมโยงสัมพันธ์กับกฎไวยากรณ์แต่ละข้อ มันคือ
ลำดับความสำคัญและการเชื่อมโยงของโทเค็นสุดท้ายหรือตามตัวอักษรในเนื้อหาของกฎ ถ้า
% ความแม่นยำ มีการใช้คีย์เวิร์ด ซึ่งจะแทนที่ค่าเริ่มต้นนี้ กฎไวยากรณ์บางอย่างอาจไม่เป็นเช่นนั้น
มีทั้งความสำคัญและความสัมพันธ์

2. หากมีข้อขัดแย้ง shift/reduce และทั้งกฎไวยากรณ์และสัญลักษณ์อินพุต
มีความสำคัญและมีความเกี่ยวข้องสัมพันธ์กัน แล้วความขัดแย้งจะได้รับการแก้ไข
เพื่อสนับสนุนการกระทำ (เปลี่ยนหรือลด) ที่เกี่ยวข้องกับลำดับความสำคัญที่สูงขึ้น ถ้า
ลำดับความสำคัญเหมือนกัน จากนั้นจึงใช้การเชื่อมโยง การเชื่อมโยงซ้าย หมายความว่า
ลด การเชื่อมโยงขวาหมายถึงการเปลี่ยนแปลง และการไม่เชื่อมโยงหมายถึงข้อผิดพลาดใน
กำลังแยกวิเคราะห์สตริง

3. เมื่อมีข้อขัดแย้งกะ/ลดข้อขัดแย้งที่ไม่สามารถแก้ไขได้โดยกฎข้อ 2 กะคือ
เสร็จแล้ว. ความขัดแย้งที่ได้รับการแก้ไขด้วยวิธีนี้จะถูกนับในผลลัพธ์การวินิจฉัยที่อธิบายไว้ใน
ความผิดพลาด การจัดการ.

4. เมื่อมีข้อขัดแย้ง ลด/ลด การลดจะดำเนินการโดยกฎไวยากรณ์ที่
เกิดขึ้นก่อนหน้าในลำดับอินพุต ความขัดแย้งที่ได้รับการแก้ไขด้วยวิธีนี้จะถูกนับใน
เอาต์พุตการวินิจฉัยที่อธิบายไว้ใน ความผิดพลาด การจัดการ.

ความขัดแย้งที่แก้ไขโดยลำดับความสำคัญหรือการเชื่อมโยงจะไม่ถูกนับในกะ/ลด
และลด/ลดความขัดแย้งที่รายงานโดย ย๊าก ในข้อผิดพลาดมาตรฐานหรือใน
ไฟล์คำอธิบาย

ความผิดพลาด การจัดการ
โทเค็น ความผิดพลาด จะถูกสงวนไว้สำหรับการจัดการข้อผิดพลาด ชื่อ ความผิดพลาด สามารถใช้ใน
กฎไวยากรณ์ ระบุตำแหน่งที่ parser สามารถกู้คืนจากข้อผิดพลาดทางไวยากรณ์ ดิ
ค่าเริ่มต้นของ ความผิดพลาด จะเป็น 256 ค่าของมันสามารถเปลี่ยนแปลงได้โดยใช้a โทเค็น% ประกาศ
เครื่องวิเคราะห์คำศัพท์ไม่ควรคืนค่าของ ความผิดพลาด.

parser จะตรวจพบข้อผิดพลาดทางไวยากรณ์เมื่ออยู่ในสถานะที่การกระทำที่เกี่ยวข้อง
ด้วยสัญลักษณ์มองไปข้างหน้าคือ ความผิดพลาด. การกระทำเชิงความหมายสามารถทำให้ parser เริ่มต้นได้
การจัดการข้อผิดพลาดโดยเรียกใช้แมโคร YYERROR เมื่อ YYERROR ถูกดำเนินการ ความหมาย
การกระทำส่งผ่านการควบคุมกลับไปที่ parser YYERROR ไม่สามารถใช้นอกความหมายได้
การปฏิบัติ

เมื่อ parser ตรวจพบข้อผิดพลาดทางไวยากรณ์ มันมักจะเรียก ความผิดพลาด() ด้วยตัวอักษร
เชือก "ไวยากรณ์ ข้อผิดพลาด" เป็นข้อโต้แย้งของมัน จะไม่มีการเรียกหาก parser ยังคงอยู่
การกู้คืนจากข้อผิดพลาดก่อนหน้าเมื่อตรวจพบข้อผิดพลาด parser ถือว่าเป็น
กำลังกู้คืนจากข้อผิดพลาดก่อนหน้าจนกว่า parser จะเลื่อนไปอย่างน้อยสาม
สัญลักษณ์อินพุตปกติตั้งแต่ตรวจพบข้อผิดพลาดล่าสุดหรือดำเนินการตามความหมาย
มาโคร เยอร็อก. parser จะไม่เรียก ความผิดพลาด() เมื่อ YYERROR ถูกดำเนินการ

ฟังก์ชันมาโคร YYRECOVERING จะส่งกลับ 1 หากตรวจพบข้อผิดพลาดทางไวยากรณ์และ
parser ยังไม่ฟื้นตัวเต็มที่ มิฉะนั้นจะคืนค่าศูนย์

เมื่อ parser ตรวจพบข้อผิดพลาดทางไวยากรณ์ parser จะตรวจสอบว่าไวยากรณ์ก่อนหน้า
ตรวจพบข้อผิดพลาด หากตรวจพบข้อผิดพลาดก่อนหน้านี้และหากไม่มีสัญลักษณ์อินพุตปกติ
ถูกเลื่อนตั้งแต่ตรวจพบข้อผิดพลาดก่อนหน้า parser จะตรวจสอบว่า
สัญลักษณ์ lookahead คือ endmarker (ดู อินเตอร์เฟซ ไปยัง คำศัพท์ วิเคราะห์). ถ้าใช่
parser จะส่งกลับด้วยค่าที่ไม่ใช่ศูนย์ มิฉะนั้น สัญลักษณ์มองไปข้างหน้าจะเป็น
ละทิ้งและการแยกวิเคราะห์ตามปกติจะกลับมา

เมื่อ YYERROR ถูกดำเนินการหรือเมื่อ parser ตรวจพบข้อผิดพลาดทางไวยากรณ์และไม่มีข้อผิดพลาดก่อนหน้า
ตรวจพบหรือมีการเลื่อนสัญลักษณ์อินพุตปกติอย่างน้อยหนึ่งรายการตั้งแต่ก่อนหน้านี้
ตรวจพบข้อผิดพลาด parser จะปรากฏขึ้นทีละสถานะจนกระทั่ง parse stack เป็น
ว่างเปล่าหรือสถานะปัจจุบันอนุญาตให้เปลี่ยนได้ ความผิดพลาด. หาก parser ล้าง parse ให้ว่างเปล่า
stack มันจะกลับมาด้วยค่าที่ไม่เป็นศูนย์ มิฉะนั้นจะเลื่อนผ่าน ความผิดพลาด และ
จากนั้นดำเนินการแยกวิเคราะห์ตามปกติ หาก parser อ่านสัญลักษณ์ lookahead ก่อนเกิดข้อผิดพลาด
ตรวจพบ สัญลักษณ์นั้นจะยังคงเป็นสัญลักษณ์มองไปข้างหน้าเมื่อทำการแยกวิเคราะห์ต่อ

มาโคร เยอร็อก ในทางความหมายย่อมทำให้ parser ทำหน้าที่เสมือนว่าได้ครบแล้ว
กู้คืนจากข้อผิดพลาดก่อนหน้านี้ มาโคร ชัดเจน จะทำให้ parser ทิ้ง
โทเค็น lookahead ปัจจุบัน หากยังไม่ได้อ่านโทเค็น lookahead ปัจจุบัน
ชัดเจน ย่อมไม่มีผล

มาโคร YYACCEPT จะทำให้ parser ส่งคืนด้วยค่าศูนย์ มาโคร YYABORT
จะทำให้ parser ส่งคืนด้วยค่าที่ไม่ใช่ศูนย์

อินเตอร์เฟซ ไปยัง คำศัพท์ วิเคราะห์
พื้นที่ วายเล็กซ์() ฟังก์ชันเป็นฟังก์ชันค่าจำนวนเต็มที่ส่งกลับ a โทเค็น จำนวน
แสดงถึงชนิดของโทเค็นที่อ่าน หากมีค่าที่เกี่ยวข้องกับโทเค็น
ส่งคืนโดย วายเล็กซ์() (ดูการสนทนาของ แท็ก ข้างต้น) ให้มอบหมายให้
ตัวแปรภายนอก ยิลวาล.

ถ้า parser และ วายเล็กซ์() ไม่เห็นด้วยกับหมายเลขโทเค็นเหล่านี้ การสื่อสารที่เชื่อถือได้
ระหว่างกันไม่สามารถเกิดขึ้นได้ สำหรับตัวอักษร (อักขระไบต์เดียว) โทเค็นเป็นเพียง
ค่าตัวเลขของอักขระในชุดอักขระปัจจุบัน ตัวเลขสำหรับโทเค็นอื่น ๆ
สามารถเลือกได้โดย ย๊ากหรือเลือกโดยผู้ใช้ ไม่ว่าในกรณีใด #กำหนด สร้าง
ของ C ใช้เพื่อให้ วายเล็กซ์() เพื่อส่งคืนตัวเลขเหล่านี้เป็นสัญลักษณ์ ดิ #กำหนด งบ
ถูกใส่ลงในไฟล์โค้ดและไฟล์ส่วนหัวหากไฟล์นั้นได้รับการร้องขอ ชุดของ
ตัวอักษรได้รับอนุญาตโดย ย๊าก ในตัวระบุมีขนาดใหญ่กว่าที่อนุญาตโดย C. Token
ชื่อที่พบว่ามีอักขระดังกล่าวจะไม่รวมอยู่ใน #กำหนด ประกาศ

หากเลือกหมายเลขโทเค็นโดย ย๊าก, โทเค็นอื่นนอกเหนือจากตัวอักษรจะได้รับมอบหมาย
ตัวเลขที่มากกว่า 256 แม้ว่าจะไม่มีการเรียงลำดับโดยนัยก็ตาม สามารถกำหนดโทเค็นได้อย่างชัดเจน
ตัวเลขตามการปรากฏตัวครั้งแรกในส่วนการประกาศที่มีตัวเลข
ชื่อและตัวอักษรที่ไม่ได้กำหนดด้วยวิธีนี้จะคงคำจำกัดความเริ่มต้นไว้ หมายเลขโทเค็นทั้งหมด
ได้รับมอบหมายจาก ย๊าก จะต้องไม่ซ้ำกันและแตกต่างจากหมายเลขโทเค็นที่ใช้สำหรับตัวอักษรและ
โทเค็นที่ผู้ใช้กำหนด หากหมายเลขโทเค็นที่ซ้ำกันทำให้เกิดข้อขัดแย้งในการสร้าง parser
ย๊าก จะรายงานข้อผิดพลาด มิฉะนั้นจะไม่ระบุว่าการมอบหมายโทเค็นเป็น
ยอมรับหรือมีการรายงานข้อผิดพลาด

จุดสิ้นสุดของอินพุตถูกทำเครื่องหมายด้วยโทเค็นพิเศษที่เรียกว่า เครื่องหมายสิ้นสุดซึ่งมีโทเค็น
ตัวเลขที่เป็นศูนย์หรือเป็นลบ (ค่าเหล่านี้ไม่ถูกต้องสำหรับโทเค็นอื่น ๆ ) All
เครื่องวิเคราะห์คำจะคืนค่าศูนย์หรือค่าลบเป็นหมายเลขโทเค็นเมื่อถึงจุดสิ้นสุดของ
ข้อมูลเข้าของพวกเขา หากโทเค็นสูงถึง แต่ไม่รวม endmarker สร้างโครงสร้างที่
ตรงกับสัญลักษณ์เริ่มต้น parser จะยอมรับอินพุต หากเห็นเครื่องหมายปลายทางใน
บริบทอื่นใดจะถือว่าเป็นข้อผิดพลาด

กำลังดำเนินการ โครงการ
นอกจาก ยีพาร์ส() และ วายเล็กซ์() ฟังก์ชัน ความผิดพลาด() และ หลัก() จำเป็นต้อง
ทำให้โปรแกรมสมบูรณ์ แอปพลิเคชันสามารถจัดหา หลัก() และ ความผิดพลาด() หรือพวกนั้น
สามารถรับกิจวัตรได้จาก ย๊าก ห้องสมุด.

ยัค ห้องสมุด
ฟังก์ชันต่อไปนี้จะปรากฏเฉพาะใน ย๊าก ห้องสมุดสามารถเข้าถึงได้ผ่านทาง -ล y
ตัวถูกดำเนินการไปยัง c99; ดังนั้นจึงสามารถกำหนดใหม่โดยแอปพลิเคชันที่สอดคล้อง:

int หลัก(ถือเป็นโมฆะ)
ฟังก์ชันนี้จะเรียก ยีพาร์ส() และออกด้วยค่าที่ไม่ระบุ การกระทำอื่น ๆ
ภายในฟังก์ชันนี้ไม่ได้ระบุ

int ความผิดพลาด(const ถัง *s)
ฟังก์ชันนี้จะเขียนอาร์กิวเมนต์ที่สิ้นสุดด้วย NUL ไปยังข้อผิดพลาดมาตรฐาน ตามด้วย
เอ .

ลำดับของ -ล y และ -ล l ตัวถูกดำเนินการให้กับ c99 มีความสำคัญ แอปพลิเคชันจะ
หรือจัดหาเอง หลัก() ทำหน้าที่หรือรับรองว่า -ล y แจ๋ว -ล l.

การแก้จุดบกพร่อง โปรแกรมแยกวิเคราะห์
parser ที่สร้างโดย ย๊าก จะต้องมีสิ่งอำนวยความสะดวกในการวินิจฉัยที่สามารถเลือกได้
เปิดใช้งานในเวลาคอมไพล์หรือรันไทม์ (หากเปิดใช้งานในเวลาคอมไพล์) ดิ
การรวบรวมรหัสการดีบักรันไทม์อยู่ภายใต้การควบคุมของ YYDEBUG ซึ่งเป็นตัวประมวลผลล่วงหน้า
สัญลักษณ์. หาก YYDEBUG มีค่าที่ไม่ใช่ศูนย์ จะต้องรวมรหัสการดีบักด้วย ถ้ามัน
ค่าเป็นศูนย์ ไม่รวมรหัส

ในตัวแยกวิเคราะห์ที่รวมรหัสการดีบักไว้ภายนอก int ยีเดบั๊ก เป็นไปได้
ใช้เพื่อเปิดการดีบัก (ด้วยค่าที่ไม่ใช่ศูนย์) และปิด (ค่าศูนย์) ขณะใช้งานจริง ดิ
ค่าเริ่มต้นของ ยีเดบั๊ก จะเป็นศูนย์

เมื่อ -t ถูกระบุ ไฟล์โค้ดจะต้องถูกสร้างขึ้นโดยที่ถ้า YYDEBUG ยังไม่ได้ทำ
กำหนดไว้ ณ เวลารวบรวม (โดยใช้ c99 -ด ตัวเลือก YYDEBUG ตัวอย่างเช่น), YYDEBUG จะ
กำหนดไว้อย่างชัดเจนเป็น 1. เมื่อ -t ไม่ได้ระบุไว้ ไฟล์โค้ดจะต้องสร้างขึ้นเพื่อให้
หากไม่ได้กำหนด YYDEBUG ไว้ จะต้องตั้งค่าให้เป็นศูนย์อย่างชัดเจน

รูปแบบของเอาต์พุตการดีบักไม่ได้ระบุ แต่มีข้อมูลอย่างน้อยเพียงพอ
เพื่อกำหนดการเปลี่ยนแปลงและลดการกระทำและสัญลักษณ์การป้อนข้อมูล อีกทั้งยังมี
ข้อมูลเกี่ยวกับการกู้คืนข้อผิดพลาด

อัลกอริทึม
Parser สร้างโดย ย๊าก ดำเนินการและ ลลล(1) อัลกอริทึมการแยกวิเคราะห์ตามที่บันทึกไว้ใน
วรรณกรรม. ไม่ได้ระบุว่า parser เป็นแบบขับเคลื่อนด้วยตารางหรือแบบเข้ารหัสโดยตรง

parser ที่สร้างโดย ย๊าก จะไม่ขอสัญลักษณ์อินพุตจาก วายเล็กซ์() ในขณะที่อยู่ใน a
ระบุว่าการดำเนินการอื่นนอกเหนือจากการดำเนินการผิดพลาดคือการลดลงตามกฎเดียว

วรรณกรรมของทฤษฎีการแยกวิเคราะห์กำหนดแนวคิดเหล่านี้

ข้อ จำกัด
พื้นที่ ย๊าก ยูทิลิตี้อาจมีตารางภายในหลายตาราง ค่าสูงสุดขั้นต่ำสำหรับตารางเหล่านี้
แสดงในตารางต่อไปนี้ ความหมายที่แท้จริงของค่าเหล่านี้คือการนำไปปฏิบัติ-
กำหนดไว้ การดำเนินการต้องกำหนดความสัมพันธ์ระหว่างค่าเหล่านี้และระหว่าง
พวกเขาและข้อความแสดงข้อผิดพลาดใด ๆ ที่การใช้งานอาจสร้างขึ้นหากมันหมด
พื้นที่สำหรับโครงสร้างภายในใดๆ การใช้งานอาจรวมกลุ่มของทรัพยากรเหล่านี้เข้าด้วยกัน
ลงในพูลเดียวตราบเท่าที่ยอดรวมที่มีให้ผู้ใช้ไม่ต่ำกว่าผลรวม
ของขนาดที่ระบุในส่วนนี้

ตาราง: ภายใน ข้อ จำกัด in ย๊าก

┌─────────────────────────────────────────────────── ──────┐
ขั้นต่ำ
ลิมิตสวิตช์สูงสุดรายละเอียด
├─────────────────────────────────────────────────── ──────┤
│{NTERMS} │ 126 │ จำนวนโทเค็น │
│{NNONTERM} │ 200 │ จำนวนขั้วที่ไม่ใช่ │
│{NPOD} │ 300 │ จำนวนกฎ │
│{NSTATES} │ 600 │ จำนวนรัฐ │
│{MEMSIZE} │ 5200 │ ความยาวของกฎ ยอดรวม │
│ │ │ ความยาว ในชื่อ (โทเค็นและ │
│ │ │ ไม่ใช่เทอร์มินัล) ของ │ . ทั้งหมด
│ │ │ กฎของไวยากรณ์ เดอะ │
│ │ │ ด้านซ้ายมือนับเป็น │
│ │ │ กฎแต่ละข้อ แม้ว่าจะไม่ใช่ │
│ │ │ ซ้ำอย่างชัดเจน เช่น │
│ │ │ ระบุไว้ใน ไวยากรณ์ กฎระเบียบ in
│ │ ย๊าก. เ
│{ACTSIZE} │ 4000 │ จำนวนการดำเนินการ ``การกระทำ'' │
│ │ │ ที่นี่ (และในคำอธิบาย │
│ │ │ ไฟล์) อ้างถึงการกระทำของ parser │
│ │ │ (เลื่อน ลด และอื่นๆ) ไม่ใช่ │
│ │ │ การกระทำตามความหมายที่กำหนดไว้ใน │
│ │ ไวยากรณ์ กฎระเบียบ in ย๊าก. เ
└─────────────────────────────────────────────────── ──────┘

EXIT สถานภาพ


ค่าทางออกต่อไปนี้จะถูกส่งคืน:

0 สำเร็จลุล่วง

>0 เกิดข้อผิดพลาด

ผลกระทบที่เกิด OF ข้อผิดพลาด


หากพบข้อผิดพลาด การเรียกใช้จะถูกยกเลิกและ ย๊าก ออกด้วยสถานะที่ไม่ใช่ศูนย์
อาจมีการสร้างไฟล์รหัสบางส่วนและไฟล์ส่วนหัว ข้อมูลสรุปใน
ไฟล์คำอธิบายจะต้องถูกสร้างขึ้นเสมอถ้า -v มีธงอยู่

พื้นที่ ดังต่อไปนี้ ส่วน เป็น ข้อมูล.

ใบสมัคร การใช้


การใช้งานในอดีตประสบความขัดแย้งในชื่อ yacc.tmp, yacc.acts,
yacc.debug, y.tab.c, y.tab.hและ y.เอาท์พุท ถ้ามีมากกว่าหนึ่งสำเนาของ ย๊าก กำลังวิ่งอยู่ในa
ไดเร็กทอรีเดียวในครั้งเดียว ดิ -ข มีการเพิ่มตัวเลือกเพื่อเอาชนะปัญหานี้ ดิ
ปัญหาที่เกี่ยวข้องกับการอนุญาตหลายรายการ ย๊าก parsers ที่จะวางไว้ในไฟล์เดียวกันคือ
แก้ไขโดยการเพิ่ม -หน้า ตัวเลือกที่จะแทนที่ฮาร์ดโค้ดก่อนหน้านี้ yy คำนำหน้าตัวแปร

คำอธิบายของ -หน้า option ระบุชุดของฟังก์ชันและชื่อตัวแปรขั้นต่ำ
ที่ก่อให้เกิดความขัดแย้งเมื่อมีการเชื่อมโยง parsers หลายตัวเข้าด้วยกัน YYSTYPE ไม่จำเป็นต้องเป็น
เปลี่ยน. โปรแกรมเมอร์สามารถใช้ .แทนได้ -ข เพื่อให้ไฟล์ส่วนหัวสำหรับ parsers ต่างๆ
ชื่ออื่นแล้วไฟล์ที่มี วายเล็กซ์() สำหรับ parser ที่กำหนดสามารถรวม the
ส่วนหัวสำหรับ parser นั้น ชื่อเช่น ชัดเจน ไม่ต้องเปลี่ยนเพราะ
ใช้ในการกระทำเท่านั้น พวกเขาไม่มีความเชื่อมโยง เป็นไปได้ว่า
การดำเนินการมีชื่ออื่น ๆ ไม่ว่าจะเป็นชื่อภายในสำหรับการดำเนินการสิ่งต่าง ๆ เช่น
ชัดเจนหรือการจัดเตรียมคุณสมบัติที่ไม่ได้มาตรฐานที่ต้องการเปลี่ยนแปลงด้วย -หน้า.

โอเปอเรเตอร์ Unary ที่เป็นโทเค็นเดียวกันกับตัวดำเนินการไบนารีโดยทั่วไปต้องการ
ลำดับความสำคัญที่ปรับ สิ่งนี้ถูกจัดการโดย % ความแม่นยำ สัญลักษณ์ที่ปรึกษาที่เกี่ยวข้องกับ
กฎไวยากรณ์เฉพาะที่กำหนดตัวดำเนินการเอกพจน์นั้น (ดู ไวยากรณ์ กฎระเบียบ in ย๊าก.)
แอปพลิเคชันไม่จำเป็นต้องใช้โอเปอเรเตอร์นี้สำหรับโอเปอเรเตอร์เอกนารี แต่ไวยากรณ์
ที่ไม่ต้องการมันหายาก

ตัวอย่าง


การเข้าถึง ย๊าก ห้องสมุดได้รับพร้อมกับตัวถูกดำเนินการค้นหาห้องสมุดถึง c99. การใช้ To
ย๊าก ห้องสมุด หลัก-

c99 y.tab.c -ล y

ทั้ง ไฟแนนเชี่ ห้องสมุดและ ย๊าก ห้องสมุดมี หลัก(). ในการเข้าถึง ย๊าก หลัก-

c99 y.tab.c เล็กซ์.ปปป -ล y -ล l

สิ่งนี้ทำให้มั่นใจได้ว่า ย๊าก ห้องสมุดถูกค้นหาก่อน เพื่อให้มัน หลัก() ถูกนำมาใช้.

ทางประวัติศาสตร์ ย๊าก ไลบรารี่มีฟังก์ชันง่าย ๆ สองฟังก์ชันที่ปกติเข้ารหัส
โดยโปรแกรมเมอร์แอพพลิเคชั่น ฟังก์ชันเหล่านี้คล้ายกับโค้ดต่อไปนี้:

#include
int หลัก (เป็นโมฆะ)
{
extern int ยีพาร์ส();

setlocale(LC_ALL, "");

/* หาก parser ต่อไปนี้สร้างขึ้นโดย lex ตัว
แอปพลิเคชันจะต้องระมัดระวังเพื่อให้แน่ใจว่า LC_CTYPE
และ LC_COLLATE ถูกตั้งค่าเป็นภาษา POSIX */
(เป็นโมฆะ) yyparse();
กลับ (0);
}

#รวม

int yyerror (อักขระ const * msg)
{
(เป็นโมฆะ) fprintf(stderr, "%s\n", msg);
กลับ (0);
}

หลักการและเหตุผล


ข้อมูลอ้างอิงใน อ้างอิง เอกสาร อาจมีประโยชน์ในการสร้าง parser
เครื่องกำเนิดไฟฟ้า บทความ DeRemer และ Pennello ที่อ้างอิง (พร้อมกับผลงานนั้น
อ้างอิง) อธิบายเทคนิคในการสร้าง parsers ที่สอดคล้องกับปริมาณของ .นี้
POSIX.1–2008. งานในด้านนี้ยังคงดำเนินต่อไป ดังนั้นผู้ดำเนินการควรปรึกษา
วรรณกรรมปัจจุบันก่อนที่จะดำเนินการใดๆ ใหม่ บทความ Knuth ดั้งเดิมคือ
พื้นฐานทางทฤษฎีสำหรับ parser ประเภทนี้ แต่ตารางที่สร้างขึ้นนั้นใช้งานไม่ได้
ใหญ่สำหรับไวยากรณ์ที่สมเหตุสมผลและไม่ควรใช้ คำว่า ``เทียบเท่า'' คือ
ตั้งใจรับรองว่าโต๊ะที่ดีที่สุดคือ ลลล(1) สามารถสร้างได้

มีความสับสนระหว่างคลาสของไวยากรณ์ อัลกอริทึมที่จำเป็นในการสร้าง
parsers และอัลกอริธึมที่จำเป็นในการแยกวิเคราะห์ภาษา ล้วนมีเหตุผล
มุมฉาก โดยเฉพาะตัวสร้าง parser ที่ยอมรับช่วงของ LR(1)
ไวยากรณ์ไม่จำเป็นต้องสร้างตารางที่ซับซ้อนกว่าที่ยอมรับ SLR(1) (ก
ระดับไวยากรณ์ LR ที่ค่อนข้างอ่อนแอ) สำหรับไวยากรณ์ที่เกิดขึ้นเป็น SLR(1). ดังกล่าว
การดำเนินการไม่จำเป็นต้องรับรู้กรณีเช่นกัน การบีบอัดตารางสามารถให้ผล SLR(1)
ตาราง (หรือน้อยกว่านั้น) โดยไม่ทราบว่าไวยากรณ์คือ SLR(1)
ความเร็วของ an LR(1) parser สำหรับคลาสใดขึ้นอยู่กับการแสดงตารางและ
การบีบอัด (หรือการสร้างโค้ดหากมีการสร้าง parser โดยตรง) มากกว่าใน class
ของไวยากรณ์ที่ตัวสร้างตารางจัดการ

ความเร็วของตัวสร้าง parser ค่อนข้างขึ้นอยู่กับคลาสของไวยากรณ์ it
ที่จับ อย่างไรก็ตาม อัลกอริธึมบทความ Knuth ดั้งเดิมสำหรับการสร้างตัวแยกวิเคราะห์ LR คือ
ตัดสินโดยผู้เขียนว่าในขณะนั้นช้าอย่างทำไม่ได้ แม้ว่า LR แบบเต็มจะมากกว่า
ซับซ้อนกว่า ลลล(1) เมื่อความเร็วของคอมพิวเตอร์และอัลกอริธึมดีขึ้น ความแตกต่าง (ในแง่
ของเวลาดำเนินการนาฬิกาแขวนที่ยอมรับได้) มีความสำคัญน้อยลง

ผู้เขียนที่มีศักยภาพได้รับการเตือนว่าบทความ DeRemer และ Pennello ที่อ้างถึง
ที่อ้างถึงก่อนหน้านี้ระบุจุดบกพร่อง (การทำให้การคำนวณของ .ง่ายเกินไป ลลล(1)
lookahead ชุด) ในบางส่วนของ ลลล(1) คำสั่งอัลกอริธึมที่อยู่ข้างหน้า
สิ่งพิมพ์ พวกเขาควรใช้เวลาในการค้นหาเอกสารนั้น เช่นเดียวกับเอกสารที่เกี่ยวข้องในปัจจุบัน
งานโดยเฉพาะของอาโฮะ

พื้นที่ -ข เพิ่มตัวเลือกเพื่อให้เป็นวิธีการพกพาสำหรับการอนุญาต ย๊าก ในการทำงานกับ
parsers แยกกันหลายตัวในไดเร็กทอรีเดียวกัน หากไดเร็กทอรีมีมากกว่าหนึ่ง
ย๊าก ไวยากรณ์ และไวยากรณ์ทั้งสองถูกสร้างขึ้นพร้อมกัน (เช่น a
ขนาน ทำ โปรแกรม) ผลการขัดกัน ในขณะที่การแก้ปัญหาไม่ใช่การปฏิบัติทางประวัติศาสตร์
มันแก้ไขข้อบกพร่องที่ทราบในการใช้งานในอดีต การเปลี่ยนแปลงที่สอดคล้องกันคือ
ทำกับทุกส่วนที่อ้างอิงชื่อไฟล์ y.tab.c (ตอนนี้ ``ไฟล์โค้ด''),
y.tab.h (ตอนนี้ ``ไฟล์ส่วนหัว'') และ y.เอาท์พุท (ตอนนี้ ``ไฟล์คำอธิบาย'')

ไวยากรณ์สำหรับ ย๊าก อินพุตจะขึ้นอยู่กับเอกสารของระบบ V คำอธิบายข้อความ
แสดงให้เห็นว่า ';' จำเป็นเมื่อสิ้นสุดกฎ ไวยากรณ์และ
การดำเนินการไม่ต้องการสิ่งนี้ (การใช้ C_IDENTIFIER ทำให้เกิดการลดลงใน
สถานที่ที่เหมาะสม.)

นอกจากนี้ ในการดำเนินการนั้น โครงสร้างเช่น โทเค็น% สามารถยุติได้โดย
แต่สิ่งนี้ไม่ได้รับอนุญาตตามหลักไวยากรณ์ คีย์เวิร์ดเช่น โทเค็น% สามารถ
ยังปรากฏเป็นตัวพิมพ์ใหญ่ซึ่งไม่ได้กล่าวถึงอีก ในสถานที่ส่วนใหญ่ที่ '%' ถูกนำมาใช้,
สามารถใช้แทนกันได้ และมีการสะกดสลับกันสำหรับสัญลักษณ์บางตัว
(ตัวอย่างเช่น, %ซ้าย เป็นไปได้ "%<" หรือแม้กระทั่ง "\<").

ประวัติศาสตร์แท็ก> สามารถมีอักขระใดก็ได้ยกเว้น '>'รวมถึงพื้นที่สีขาวใน
การดำเนินการ อย่างไรก็ตาม เนื่องจาก แท็ก ต้องอ้างอิงสมาชิกสหภาพมาตรฐาน ISO C ใน
การปฏิบัติที่สอดคล้องต้องสนับสนุนเฉพาะชุดอักขระสำหรับ ISO C
ตัวระบุมาตรฐานในบริบทนี้

การดำเนินการในอดีตบางอย่างเป็นที่ทราบกันว่ายอมรับการกระทำที่ยุติโดย
ระยะเวลา. การใช้งานในอดีตมักจะอนุญาต '$' ในชื่อ การดำเนินการที่สอดคล้อง
ไม่จำเป็นต้องสนับสนุนพฤติกรรมเหล่านี้

ตัดสินใจว่าจะใช้เมื่อใด % ความแม่นยำ แสดงให้เห็นถึงความยากลำบากในการระบุพฤติกรรมของ ย๊าก.
อาจมีสถานการณ์ที่ ไวยากรณ์ ไม่ได้พูดอย่างเคร่งครัดผิดและยัง
ย๊าก ไม่สามารถตีความได้อย่างชัดเจน การแก้ปัญหาความคลุมเครือในไวยากรณ์ can
ในหลาย ๆ กรณีสามารถแก้ไขได้โดยการให้ข้อมูลเพิ่มเติมเช่นการใช้ %พิมพ์ or
%ยูเนี่ยน ประกาศ มักจะง่ายกว่าและมักจะให้ parser ที่มีขนาดเล็กกว่าที่จะใช้
ทางเลือกนี้เมื่อมีความเหมาะสม

ขนาดและเวลาดำเนินการของโปรแกรมที่สร้างขึ้นโดยไม่มีโค้ดการดีบักรันไทม์คือ
มักจะเล็กกว่าและเร็วกว่าเล็กน้อยในการใช้งานในอดีต

ข้อความสถิติจากการใช้งานในอดีตหลายอย่างรวมถึง .ประเภทต่อไปนี้
ข้อมูล:

n/512 ขั้ว, n/300 ไม่ใช่เทอร์มินัล
n/600 กฎไวยากรณ์ n/1500 รัฐ
n กะ/ลด, n ลด/ลดข้อขัดแย้งที่รายงาน
n/350 ชุดทำงานที่ใช้
หน่วยความจำ: สถานะ ฯลฯ n/15000, พาร์เซอร์ n/ 15000
n/600 ชุด lookahead ที่แตกต่างกัน
n การปิดเพิ่มเติม
n รายการกะ n ข้อยกเว้น
n ไปที่รายการ
n รายการที่บันทึกไว้โดยไปที่ค่าเริ่มต้น
พื้นที่เครื่องมือเพิ่มประสิทธิภาพที่ใช้: อินพุต n/15000, เอาต์พุต n/ 15000
n รายการตาราง n เป็นศูนย์
สเปรดสูงสุด: n, ออฟเซ็ตสูงสุด: n

รายงานของตารางภายในในไฟล์คำอธิบายถูกทิ้งให้มีการนำไปใช้งานที่กำหนดไว้
เพราะทุกแง่มุมของข้อจำกัดเหล่านี้ถูกกำหนดด้วยการนำไปปฏิบัติด้วย การใช้งานบางอย่าง
อาจใช้เทคนิคการจัดสรรแบบไดนามิกและไม่มีค่าจำกัดเฉพาะในการรายงาน

รูปแบบของ y.เอาท์พุท ไม่ได้ให้ไฟล์เพราะไม่ได้ระบุข้อกำหนดของรูปแบบ
เห็นเพื่อเพิ่มความสามารถในการพกพาแอพพลิเคชั่น รายชื่อนี้มีวัตถุประสงค์หลักเพื่อช่วยเหลือมนุษย์
ผู้ใช้เข้าใจและดีบักตัวแยกวิเคราะห์ การใช้ y.เอาท์พุท โดยสคริปต์แอปพลิเคชันที่สอดคล้อง
จะเป็นเรื่องผิดปกติ นอกจากนี้ การใช้งานไม่ได้ให้ผลลัพธ์ที่สม่ำเสมอและไม่มี
รูปแบบที่นิยมปรากฏให้เห็น รูปแบบที่เลือกโดยการนำไปปฏิบัติควรเป็นแบบมนุษย์-
สามารถอ่านได้นอกเหนือจากข้อกำหนดว่าจะเป็นไฟล์ข้อความ

รายงานข้อผิดพลาดมาตรฐานไม่ได้อธิบายไว้โดยเฉพาะเนื่องจากไม่ค่อยได้ใช้งาน
สอดคล้องกับแอปพลิเคชันและไม่มีเหตุผลที่จะจำกัดการใช้งาน

การใช้งานบางอย่างรับรู้ "={" เทียบเท่ากับ '{' เพราะมันปรากฏในประวัติศาสตร์
เอกสาร การก่อสร้างนี้ได้รับการยอมรับและจัดทำเป็นเอกสารว่าล้าสมัยเมื่อนานมาแล้วเช่น
1978 ในการอ้างอิง ยัค: ยัง อื่น คอมไพเลอร์-คอมไพเลอร์. เล่มนี้ของ POSIX.1-2008
เลือกที่จะปล่อยให้มันล้าสมัยและละเลย

ตัววิเคราะห์คำศัพท์ควรรู้จักอักขระแบบหลายไบต์และส่งกลับเป็นโทเค็น
ไม่ควรส่งคืนเป็นตัวอักษรแบบหลายไบต์ โทเค็น ความผิดพลาด ที่ใช้
สำหรับการกู้คืนข้อผิดพลาดโดยปกติกำหนดค่า 256 ในการใช้งานในอดีต
ดังนั้น ค่าโทเค็น 256 ซึ่งใช้ในชุดอักขระหลายไบต์จำนวนมาก ไม่ใช่
พร้อมใช้งานเป็นค่าของโทเค็นที่ผู้ใช้กำหนด

อนาคต ลู่ทาง


ไม่

ใช้ yaccposix ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

  • 1
    itop - ITSM CMDB OpenSource
    ittop - ITSM CMDB โอเพ่นซอร์ส
    IT Operations Portal: การเปิดที่สมบูรณ์
    แหล่งที่มา ITIL บริการบนเว็บ
    เครื่องมือการจัดการรวมทั้งอย่างเต็มที่
    CMDB ที่ปรับแต่งได้ ระบบ Helpdesk และ
    คนทำเอกสาร...
    ดาวน์โหลด itop - ITSM CMDB OpenSource
  • 2
    Clementine
    Clementine
    Clementine เป็นเพลงหลายแพลตฟอร์ม
    เครื่องเล่นและผู้จัดห้องสมุดที่ได้รับแรงบันดาลใจจาก
    อมาร็อก 1.4. มีความรวดเร็วและ
    อินเทอร์เฟซที่ใช้งานง่ายและช่วยให้คุณ
    ค้นหาและ ...
    ดาวน์โหลดเคลเมนไทน์
  • 3
    XISMuS
    XISMuS
    คำเตือน: อัปเดตสะสม 2.4.3 มี
    ถูกปล่อยออกมา!! การอัปเดตใช้ได้กับทุก ๆ
    เวอร์ชันก่อนหน้า 2.xx ถ้าอัพเกรด
    จากเวอร์ชัน v1.xx โปรดดาวน์โหลดและ
    i ...
    ดาวน์โหลด XISMuS
  • 4
    เฟซแทร็กนัวร์
    เฟซแทร็กนัวร์
    โปรแกรม headtracking แบบโมดูลาร์นั้น
    รองรับตัวติดตามใบหน้าและตัวกรองหลายตัว
    และเกมโปรโตคอล ในบรรดาผู้ติดตาม
    คือ SM FaceAPI, AIC Inertial Head
    ติดตาม ...
    ดาวน์โหลด facetracknoir
  • 5
    PHP คิวอาร์โค้ด
    PHP คิวอาร์โค้ด
    PHP QR Code เป็นโอเพ่นซอร์ส (LGPL)
    ห้องสมุดสำหรับสร้างรหัส QR,
    บาร์โค้ด 2 มิติ ขึ้นอยู่กับ
    ไลบรารี libqrencode C จัดเตรียม API สำหรับ
    การสร้างบาร์โค้ด QR Code...
    ดาวน์โหลด PHP QR Code
  • 6
    freeciv
    freeciv
    Freeciv เป็นเกมเทิร์นเบสฟรี
    เกมกลยุทธ์แบบผู้เล่นหลายคนซึ่งในแต่ละ
    ผู้เล่นกลายเป็นผู้นำของa
    อารยธรรมต่อสู้เพื่อให้ได้
    เป้าหมายสูงสุด : เป็น...
    ดาวน์โหลด Freeciv
  • เพิ่มเติม»

คำสั่ง Linux

Ad