หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Note
กลุ่มที่น่าสนใจของชุมชนได้ย้ายจาก Yammer ไปยัง Microsoft Viva Engage แล้ว หากต้องการเข้าร่วมชุมชน Viva Engage และเข้าร่วมในการสนทนาล่าสุด ให้กรอก แบบฟอร์ม คําขอการเข้าถึงการเงินและการดําเนินงาน Viva Engage Community และเลือกชุมชนที่คุณต้องการเข้าร่วม
บทความนี้ประกอบด้วยการอ้างอิงไวยากรณ์สําหรับ X++
คําสําคัญ X++
คําสําคัญ X++ ที่แสดงในตารางต่อไปนี้ถูกสงวนไว้ คําหลักเหล่านี้ไม่สามารถใช้สําหรับวัตถุประสงค์อื่น ๆ ได้
| คําที่สงวนไว้ | คำอธิบาย | ข้อมูลที่เกี่ยวข้อง |
|---|---|---|
| ! | ไม่ | ตัวดําเนินการเชิงสัมพันธ์ |
| != | ตัวดําเนินการความไม่เท่ากัน (ไม่เท่ากับ) | ตัวดําเนินการเชิงสัมพันธ์ |
| # | คํานําหน้าในชื่อแมโคร | วิธีการ: ใช้ #define และ #if เพื่อทดสอบแมโคร |
| & | ไบนารี AND | ตัวดําเนินการทางคณิตศาสตร์ |
| && | ตรรกะ AND | ตัวดําเนินการเชิงสัมพันธ์ |
| - | ตัวดําเนินการเรียกฟังก์ชัน ซึ่งระบุจุดเริ่มต้นของการเรียกใช้ฟังก์ชัน | |
| - | ตัวดําเนินการเรียกฟังก์ชัน ซึ่งระบุจุดสิ้นสุดของการเรียกฟังก์ชัน | |
| * | คูณ เครื่องหมายดอกจัน (*) ยังใช้ใน SQL X++ ด้วย การใช้เพียงครั้งเดียวคือเพื่อระบุเขตข้อมูลทั้งหมดจากตารางใน select คําสั่ง การใช้งานอื่นคือเป็นสัญลักษณ์ตัวแทนที่มีตัว like ดําเนินการ เพื่อแสดงอักขระ 0 ถึงอักขระประเภทใดก็ได้ ตัว like ดําเนินการยังใช้อักขระ ? ด้วย |
ตัวดําเนินการทางคณิตศาสตร์ |
| ^ | XOR ไบนารี | ตัวดําเนินการทางคณิตศาสตร์ |
| | | Binary OR. | ตัวดําเนินการทางคณิตศาสตร์ |
| || | ตรรกะ OR | ตัวดําเนินการเชิงสัมพันธ์ |
| ~ | ไม่ | ตัวดําเนินการทางคณิตศาสตร์ |
| + | บวก | ตัวดําเนินการทางคณิตศาสตร์ |
| ++ | เพิ่ม | ตัวดําเนินการกําหนด |
| += | การมอบหมายที่เพิ่ม | ตัวดําเนินการกําหนด |
| , | ตัวดําเนินการจุลภาค นิพจน์ที่คั่นด้วยเครื่องหมายจุลภาคจะถูกประเมินตามลําดับจากซ้ายไปขวา | |
| - | ลบ | ตัวดําเนินการทางคณิตศาสตร์ |
| -- | ตัวดําเนินการลดค่า | ตัวดําเนินการกําหนด |
| -= | การกําหนดสตริงย่อย | ตัวดําเนินการกําหนด |
| . | ตัวดําเนินการเข้าถึงสมาชิกคลาส ตัวอย่างเช่น formRun.run เข้าถึง run วิธีการ ของออบเจ็กต์ของชนิด FormRunคลาส |
|
| / | แบ่ง | ตัวดําเนินการทางคณิตศาสตร์ |
| \ | หลีกในสตริง เลี่ยงเครื่องหมายอัญคําพูดที่เกินและตัวอักษรบางตัวเช่น '\t' สําหรับแท็บ | |
| @ | การหลีกเลี่ยงคําสําคัญ ตัวอย่างเช่น var @str = 1@abstract; ล้มเหลวในการคอมไพล์โดยไม่มี @ อักขระที่ทําให้สตริงใด ๆ ตามมาถือว่าเป็นตัวระบุ นอกจากนี้ยังมีผลต่อสตริงสัญพจน์โดยลบผลกระทบของอักขระการเลี่ยง \ และโดยการเปิดใช้งานสตริงเพื่อขยายมากกว่าหนึ่งบรรทัดในรหัสต้นทาง บรรทัดใหม่ถูกแสดงด้วยอักขระของ 0x0A เลขฐานสิบหกหนึ่งอักขระ ซึ่งมักเรียกว่าฟีดบรรทัด ไม่มีอักขระขึ้นบรรทัดใหม่ของ 0x0D เลขฐานสิบหกรวมอยู่ใน 0x0D0A | |
| - | อักขระเครื่องหมายทวิภาค (:) จะถูกใช้เพื่อคั่นค่าตัวพิมพ์เล็ก switch ในคําสั่ง |
|
| :: | ใช้ในการเรียกใช้เมธอด static (คลาส) : ClassName::methodName() และเพื่อกําหนดสัญพจน์การแจงนับ เช่น NoYes::Yes | |
| ; | รายงานการสิ้นสุดการจ้างงาน ใช้ใน for ลูปหรือเป็นตัวคั่นของส่วนตัวกําหนดค่าเริ่มต้น อัปเดต และส่วนการตรวจสอบค่า |
|
| < | น้อยกว่า | ตัวดําเนินการเชิงสัมพันธ์ |
| << | กะซ้าย | ตัวดําเนินการทางคณิตศาสตร์ |
| <- | น้อยกว่าหรือเท่ากับ | ตัวดําเนินการทางคณิตศาสตร์ |
| = | ตัวดําเนินการกําหนด อาร์กิวเมนต์ทางด้านซ้ายของ "=" ถูกตั้งค่าเป็นค่าของอาร์กิวเมนต์ไปทางขวา | ตัวดําเนินการกําหนด |
| == | แสดงค่าเป็น true ถ้านิพจน์เท่ากัน | ตัวดําเนินการเชิงสัมพันธ์ |
| > | มากกว่า | ตัวดําเนินการเชิงสัมพันธ์ |
| >- | มากกว่าหรือเท่ากับ | ตัวดําเนินการเชิงสัมพันธ์ |
| >> | เลื่อนไปทางขวาหนึ่งบิต ตัวดําเนินการนี้จะเลื่อนบิตทางด้านซ้ายมือตามจํานวนทางด้านขวา แต่ละกะจะหารตัวเลขด้วย 2^n ได้อย่างมีประสิทธิภาพ โดยที่ n คือจํานวนตําแหน่งที่เลื่อน | ตัวดําเนินการทางคณิตศาสตร์ |
| ?: | ตัวดําเนินการ Ternary นอกจากนี้ ตัวดําเนินการ จะใช้อักขระเครื่องหมายคําถาม (like) ในการระบุอักขระชนิดใดชนิดหนึ่ง ตัว like ดําเนินการ ยังใช้ อักขระด้วย |
ตัวดําเนินการ Ternary (?) |
| [ | ตัวตรวจนับอาร์เรย์ เปิด ต้องใช้กับ "]" | |
| ] | ตัวตรวจนับอาร์เรย์ ปิด ต้องใช้กับ "[" | |
| { | เริ่มต้นคําสั่งผสมที่อาจมีคําสั่งศูนย์หรือมากกว่านั้น คําสั่งแบบผสมลงท้ายด้วย "}" ที่ตรงกันมากที่สุด | |
| } | ระบุจุดสิ้นสุดของคําสั่งผสมที่อธิบายไว้ข้างต้น "{" ต้องปรากฏก่อนคําสั่งแรกเหล่านี้ | |
| นามธรรม | ตัวปรับเปลี่ยนคลาสและเมธอด ไม่สามารถสร้างคลาส นามธรรม ด้วยคําสําคัญ ใหม่ - เฉพาะคลาสที่สืบทอดมาจากคลาสเท่านั้น ไม่สามารถเรียกเมธอด นามธรรม ได้ มีเพียงวิธีการเท่านั้นที่แทนที่ได้ ตารางสามารถปรับเปลี่ยนเป็นนามธรรมโดยการตั้งค่าคุณสมบัติ Abstract เป็น ใช่ ใน AOT หรือโดยใช้ DictTable คลาส คุณสมบัติ Abstract เป็นค่าเริ่มต้นเป็น ไม่ และไม่สามารถตั้งค่าได้ เว้นแต่ว่าตารางจะถูกขยายโดยตารางอื่น แต่ละแถวในตารางนามธรรมต้องมีแถวที่ขึ้นต่อกันในตารางที่ได้รับมา ซึ่งหมายความว่าแต่ละแถวในตารางนามธรรมมีค่ามากกว่าศูนย์ในเขตข้อมูลคุณสมบัติ InstanceRelationType ไม่มีผลกระทบอื่น ๆ จากการทําเครื่องหมายตารางเป็นนามธรรม ผู้เขียนโปรแกรมมักใช้คําศัพท์เป็นรูปธรรมเพื่ออธิบายคลาสที่ไม่ใช่นามธรรม |
ภาพรวมการสืบทอดตารางตัวแก้ไขวิธีการ |
| anytype (ชนิด anytype) | ชนิดที่สามารถมีค่าชนิดใดก็ได้ | Anytype |
| เป็น | จําเป็นเมื่อคุณกําหนดตัวแปรคลาสพื้นฐานให้กับตัวแปรคลาสที่ได้รับมา ตัวอย่างเช่น กําหนดDerivedคลาสที่ขยายBaseคลาส คําสั่ง myDerived = myBase as Derived; จะหลีกเลี่ยงข้อผิดพลาดของคอมไพเลอร์โดยใช้ เป็นคําสําคัญ คําหลักนี้ยังนําไปใช้เมื่อคุณกําหนดตัวแปรตารางพื้นฐานให้กับตัวแปรตารางที่ได้รับมา ถ้าค่า (myBase) ไม่ใช่ชนิดที่กําหนด (ได้รับมา) นิพจน์จะส่งกลับค่า null |
ตัวดําเนินการนิพจน์: เป็น และ สําหรับการสืบทอด |
| asc | ตัวเลือกบนส่วนคําสั่ง หรือ orderby ในgroupbyselectคําสั่ง การเรียงลําดับจะเรียงจากน้อยไปหามาก |
เลือกไวยากรณ์คําสั่ง |
| ที่ | ระบุตําแหน่งของหน้าต่างพิมพ์เป็นส่วนหนึ่งของ print คําสั่ง ไม่ควรใช้คําสั่งพิมพ์ |
พิมพ์รายงาน |
| เฉลี่ย | ส่งกลับค่าเฉลี่ยของเขตข้อมูลจากแถวที่ระบุโดย group by ส่วนคําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| แตก | ออกจากบล็อกโค้ดแบบซ้ําทันที | คําสั่งแบ่ง |
| จุดสั่งหยุด | แสดงจุดสั่งหยุดที่กําหนดสําหรับวัตถุประสงค์ในการดีบัก เมื่อต้องการตั้งค่าจุดสั่งหยุดในโค้ดของคุณ ให้เขียน: breakpoint; |
|
| โดย | ส่วนของเงื่อนไขที่สงวนไว้ เช่น จัดกลุ่มตามและเรียงลําดับตาม | |
| byref | ระบุว่าพารามิเตอร์ที่ส่งผ่านไปยังเมธอด ที่เรียกใช้กําลังส่งผ่านโดยการอ้างอิง (ที่อยู่) แทนที่จะเป็นตามค่า Byref ถูกใช้ใน X++ เมื่อเรียกใช้เมธอด .NET ที่ใช้พารามิเตอร์โดยการอ้างอิง (เช่น คําหลัก C# ออก หรือ อ้างอิง) | วิธีการ: ใช้คําสําคัญ byref สําหรับ CLR Interop |
| คดี | การเลือกภายใน switch คําสั่ง |
เปลี่ยนคําสั่ง |
| จับ | ใช้ในการจัดการข้อยกเว้น | จัดการข้อยกเว้นด้วยการพยายามและจับคําสําคัญ |
| changeCompany | เปลี่ยนแปลงการตั้งค่าฐานข้อมูลไปเป็นบริษัทอื่น | เปลี่ยนรูปแบบการออกแบบบริษัท |
| ประเภท | ประกาศคลาส | คลาสใน X++ |
| ลูกค้า | ตัวแก้ไขเมธอด ตัวแก้ไขเหล่านี้ไม่ได้ใช้อีกต่อไป วิธีการทั้งหมดจะดําเนินการบนระดับเซิร์ฟเวอร์ | ตัวแก้ไขวิธีการ |
| ภาชนะ |
containerกําหนดชนิด คอนเทนเนอร์ประกอบด้วยลําดับของค่าอะตอมและคอนเทนเนอร์อื่น ๆ |
ภาชนะ |
| ต่อเนื่อง | บังคับให้เกิดการเกิดซ้ําถัดไปของรอบ | ดําเนินการต่อตามคําสั่ง |
| นับ | ส่งกลับจํานวนเรกคอร์ดจากแถวที่ระบุโดย group by ส่วนคําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| crossCompany | ทําให้คําสั่ง select ส่งกลับข้อมูลสําหรับบริษัททั้งหมดที่ผู้ใช้ได้รับอนุญาตให้อ่านได้ |
ข้อมูลพื้นฐานเกี่ยวกับรหัส X++ ข้ามบริษัท |
| วันที่ | ระบุตัวแปรของชนิดdate |
Dates |
| เริ่ม ต้น | กรณีเริ่มต้นภายใน switch คําสั่ง ระบบจะดําเนินการบล็อกรหัสในส่วนเริ่มต้นหากค่าสลับไม่ตรงกับส่วนคําสั่งใด ๆ case ที่กําหนดไว้ใน switch คําสั่ง |
เปลี่ยนคําสั่ง |
| ตัวแทน | สมาชิกคลาสที่สามารถจัดเก็บการอ้างอิงหลายรายการไปยังวิธีการในคลาสอื่น และเรียกใช้วิธีการเหล่านั้นทั้งหมดเมื่อได้รับพร้อมท์ให้ทําเช่นนั้น ผู้รับมอบสิทธิ์สามารถจัดเก็บการอ้างอิงไปยังวิธีการชนิดต่าง ๆ รวมถึงวิธีต่อไปนี้:
|
คําศัพท์และคําสําคัญของกิจกรรม X++, C# การเปรียบเทียบ: เหตุการณ์ |
| delete_from | ช่วยให้คุณสามารถลบระเบียนออกจากฐานข้อมูลได้ | delete_from |
| สูง สุด | ตัวเลือกบนส่วนคําสั่ง หรือ order by ในgroup byselectคําสั่ง การเรียงลําดับเรียงจากมากไปหาน้อย |
เลือกไวยากรณ์คําสั่ง |
| แสดง | ตัวแก้ไขเมธอด
วิธีการแสดง</แสดง>ถูกใช้เพื่อแสดงค่าจากการคํานวณในตัวควบคุมฟอร์ม ค่าเหล่านี้จะไม่ถูกจัดเก็บไว้ในฐานข้อมูล แต่มีการคํานวณแบบไดนามิก ซึ่งแตกต่างจากเขตข้อมูลปกติ |
ตัวแก้ไขวิธีการ |
| div | การหารจํานวนเต็ม | ตัวดําเนินการทางคณิตศาสตร์ |
| ปฏิบัติ | จุดเริ่มต้นของการ do...while วนรอบ |
ปฏิบัติ ขณะที่วนรอบ |
| แก้ไข | ตัวแก้ไขเมธอด
editวิธีการใน X++ ช่วยให้ผู้ใช้สามารถปรับเปลี่ยนค่าในตัวควบคุมฟอร์มขณะดําเนินการตรรกะแบบกําหนดเอง วิธีการแก้ไขเปิดใช้งานทั้งการดูและการแก้ไข ซึ่งแตกต่างจาก display วิธีการ ซึ่งแสดงเฉพาะค่าจากการคํานวณเท่านั้น
|
ตัวแก้ไขวิธีการ |
| อื่น | การดําเนินการตามเงื่อนไข (if...else) ส่วนของelseifคําสั่ง จะถูกดําเนินการ หากมีการประเมินนิพจน์ในคําสั่ง ถ้า ได้รับการประเมินเป็นfalse |
หาก และ ถ้า ... ข้อความอื่น |
| eventHandler | ต้องใช้ทุกครั้งที่คุณเพิ่มหรือลบการอ้างอิงเมธอดจากผู้รับมอบสิทธิ์โดยใช้ตัว+=ดําเนินการ หรือ-= ตัวอย่างเช่น: myDelegate += eventHandler(OtherClass::myStaticMethod); | คําศัพท์และคําสําคัญของกิจกรรม X++, C# การเปรียบเทียบ: เหตุการณ์ |
| อยู่ | ใช้กับ join คําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| ขยาย | คําสั่งการประกาศคลาสหรืออินเทอร์เฟซ ถ้าคลาสของคุณไม่ได้ขยายคลาสอื่นอย่างชัดเจน คลาสของคุณจะได้รับการพิจารณาเพื่อขยาย Object คลาส (ราวกับว่าคุณเขียน "ขยายวัตถุ") |
การสร้างคลาสย่อย |
| เท็จ | สัญพจน์บูลีน | บูลีน |
| สุดท้าย | ตัวปรับเปลี่ยนคลาสและเมธอด ระบุว่าวิธีนี้ไม่สามารถแทนที่ได้ | ตัวแก้ไขวิธีการ |
| FirstFast | ใช้ใน select คําสั่งเพื่อเพิ่มความเร็วการดึงข้อมูลสําหรับแถวแรก |
เลือกไวยากรณ์คําสั่ง |
| firstOnly | ใช้ใน select คําสั่งเพื่อดึงข้อมูลเฉพาะเรกคอร์ดแรกเท่านั้น คําfirstOnlyหลักนี้ไม่รับประกันว่าจะมีการเรียกใช้เรกคอร์ดสูงสุดหนึ่งรายการโดยคําสั่ง X++ SQL select ถ้า AOS สามารถใช้ EntireTable แคชเพื่อตอบสนองความต้องการข้อมูลของ select คําสั่ง firstOnly คําสําคัญจะถูกละเว้น |
เลือกการแคชไวยากรณ์ตามคําสั่ง |
| firstOnly10 | เหมือนกับ firstOnly เว้นแต่จะแสดง 10 แถวแทนที่จะเป็นหนึ่ง | |
| firstOnly100 | เหมือนกับ firstOnly เว้นแต่จะแสดง 100 แถวแทนที่จะเป็นหนึ่ง | |
| firstOnly1000 | เหมือนกับ firstOnly เว้นแต่จะแสดง 1,000 แถวแทนที่จะเป็นหนึ่ง | |
| ล้าง | ล้างแคชของตารางทั้งหมด ซึ่งจะเป็นประโยชน์เมื่อคุณต้องการตรวจสอบให้แน่ใจว่าการเปลี่ยนแปลงใด ๆ ที่ทํากับตารางจะแสดงในการดําเนินการที่ตามมาทันที | การแคชตามการตั้งค่า |
| เพื่อ | สําหรับการวนซ้ําแบบวนรอบ | สําหรับรอบ |
| forceLiterals | ใช้ใน select คําสั่งเพื่อแสดงค่าจริงที่ใช้ใน where ข้อสําหรับฐานข้อมูล Microsoft SQL Server ในเวลาการปรับให้เหมาะสม |
เลือกไวยากรณ์คําสั่ง |
| forceNestedLoop | บังคับให้ฐานข้อมูล SQL Server ใช้อัลกอริทึมการวนรอบแบบซ้อนในการประมวลผลคําสั่ง SQL เฉพาะที่มีjoin |
เลือกไวยากรณ์คําสั่ง |
| forcePlaceholders | ใช้ใน select คําสั่ง เพื่อแนะนําเคอร์เนลที่จะไม่แสดงค่าที่แท้จริงที่ใช้ใน where คําสั่งไปยังฐานข้อมูล Microsoft SQL Server ในเวลาที่ทําการปรับให้เหมาะสม |
เลือกไวยากรณ์คําสั่ง |
| forceSelectOrder | บังคับให้ฐานข้อมูล SQL Server เข้าถึงตารางในการรวมตามลําดับที่ระบุ | เลือกไวยากรณ์คําสั่ง |
| forUpdate | เลือกระเบียนสําหรับการอัปเดตเท่านั้น การดําเนินการที่จะดําเนินการกับเรกคอร์ดที่ดึงข้อมูลคือการอัปเดต เรกคอร์ดอาจถูกล็อกสําหรับผู้ใช้รายอื่น | เลือกไวยากรณ์คําสั่ง |
| จาก | ส่วนหนึ่งของ select คําสั่ง ส่วน from คําสั่งระบุบัฟเฟอร์ตารางที่มีคอลัมน์อยู่ |
เลือกไวยากรณ์คําสั่ง |
| กลุ่ม | ส่วนหนึ่งของ group by คําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| if | การดําเนินการตามเงื่อนไข | หาก และ ถ้า ... ข้อความอื่น |
| ประมวล ผล | การใช้งานของinterface |
ภาพรวมอินเทอร์เฟซ |
| insert_recordset | คัดลอกข้อมูลจากตารางหนึ่งหรือหลายตารางไปเป็นตารางปลายทางหนึ่งตารางในการเดินทางไปยังเซิร์ฟเวอร์เดียว | insert_recordset |
| int | ระบุตัวแปรของชนิด integer (32 บิต) |
จํานวนเต็ม |
| int64 | ระบุตัวแปรของชนิด integer (64 บิต) |
จํานวนเต็ม |
| อิน เทอร์ เฟซ | การประกาศอินเทอร์เฟซ | ภาพรวมอินเทอร์เฟซ |
| คือ | ถามว่าออบเจ็กต์ที่อ้างอิงโดยตัวแปรคลาส สืบทอดมาจากคลาสที่กําหนดหรือเป็นของคลาสที่กําหนด ตัวอย่างเช่น กําหนดDerivedคลาสที่ขยายBaseคลาส นิพจน์(myDerived is Base)จะส่งกลับ true คําสําคัญนี้นําไปใช้กับการสืบทอดคลาสและการสืบทอดตาราง |
ตัวดําเนินการนิพจน์: เป็น และ สําหรับการสืบทอด |
| join | ตารางจะถูกรวมเข้าด้วยกันในคอลัมน์ที่ใช้ร่วมกันในทั้งสองตาราง คุณสามารถสร้างชุดผลลัพธ์เดียวที่ยึดตามหลายตารางได้โดยใช้การรวม | เลือกไวยากรณ์คําสั่ง |
| ชอบ | ทดสอบการจับคู่ตามรูปแบบ ด้วยสัญลักษณ์ตัวแทน '*' และ '?' | ตัวดําเนินการเชิงสัมพันธ์ |
| maxof | ส่งกลับค่าสูงสุดของเขตข้อมูลจากแถวที่ระบุโดย group by ส่วนคําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| minof | ส่งกลับค่าต่ําสุดของเขตข้อมูลจากแถวที่ระบุโดย group by ส่วนคําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| mod | ส่งกลับตัวเหลือของจํานวนเต็มของนิพจน์ด้านซ้าย 1 หารด้วยนิพจน์ด้านขวา 2 บางครั้งก็เรียกว่าตัวดําเนินการมอดุโลอย่างไม่เป็นทางการ
(12 mod 7) == 5 เป็นจริง |
|
| ใหม่ | ผู้ปฏิบัติการ สร้างอินสแตนซ์ของคลาส หรือจัดสรรหน่วยความจําสําหรับอาร์เรย์ | |
| ต่อไป | ดึงข้อมูลเรกคอร์ดถัดไปในตารางหรือเรียกใช้วิธีการถัดไปในลําดับการเกี่ยวโยงของคําสั่ง | |
| noFetch | ระบุว่าจะไม่มีการดึงข้อมูลเรกคอร์ดในขณะนี้ | เลือกไวยากรณ์คําสั่ง |
| notExists | ใช้กับ join คําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| โมฆะ | ค่าคงที่ที่เป็นสัญลักษณ์ | |
| optimisticLock | บังคับให้คําสั่งทํางานด้วยตัวควบคุมภาวะพร้อมกันในเชิงบวก แม้ว่าจะตั้งค่าต่างกันในตารางก็ตาม | เลือกไวยากรณ์คําสั่ง |
| สั่ง | ส่วนหนึ่งของ order by คําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| ภายนอก | การรวมภายนอก | เลือกไวยากรณ์คําสั่ง |
| หยุด | หยุดการดําเนินการของงาน ผู้ใช้จะถูกขอให้ระบุว่าควรดําเนินการต่อไปหรือไม่ คุณไม่ควรใช้คําสั่งนี้ในรหัสการผลิต | เลือกคําสั่ง |
| pessimisticLock | บังคับให้คําสั่งรันด้วยตัวควบคุมการเกิดพร้อมกันในเชิงลบ แม้ว่าจะตั้งค่าที่แตกต่างกันบนตารางก็ตาม | เลือกไวยากรณ์คําสั่ง |
| พิมพ์ | ช่วยให้คุณสามารถแสดงเอาต์พุตบนหน้าจอได้ คุณไม่ควรใช้คําสั่งนี้ในรหัสการผลิต | พิมพ์รายงาน |
| ส่วนตัว | ตัวปรับเปลี่ยนการเข้าถึงเมธอด เมธอด สามารถใช้ได้ภายในคลาสที่ตรวจนับวิธีการ เท่านั้น | การควบคุมการเข้าถึงเมธอด |
| ป้องกัน | ตัวปรับเปลี่ยนการเข้าถึงเมธอด เมธอด สามารถใช้จากวิธีการ ในคลาส ที่ประกาศวิธีการ และในคลาสที่ได้รับใดๆ | การควบคุมการเข้าถึงเมธอด |
| สาธารณะ | ตัวปรับเปลี่ยนการเข้าถึงเมธอด เมธอด อาจถูกเรียกจากคลาสใด ๆ | การควบคุมการเข้าถึงเมธอด |
| จริง | กําหนด real ชนิด ชนิดทศนิยมโดยไม่มีข้อผิดพลาดในการปัดเศษ |
เรียลส์ |
| repeatableRead (อ่านซ้ําได้) | ระบุว่าไม่มีธุรกรรมอื่นใดที่สามารถปรับเปลี่ยนข้อมูลที่ถูกอ่านโดยตรรกะภายในธุรกรรมปัจจุบัน จนกว่าหลังจากธุรกรรมปัจจุบันเสร็จสมบูรณ์ ธุรกรรมที่ชัดเจนเสร็จสมบูรณ์ที่ ttsAbort หรือที่ ttsCommit ด้านนอกสุด สําหรับคําสั่งเลือกแบบสแตนด์อโลน ระยะเวลาของธุรกรรมคือระยะเวลาของคําสั่งเลือก อย่างไรก็ตาม ในบางครั้งฐานข้อมูลจะบังคับใช้สิ่งที่เทียบเท่ากับ RepeatableRead ในคําสั่ง ที่เลือก แต่ละคําสั่ง แม้ว่าจะไม่มีคําสําคัญนี้ปรากฏในโค้ด X++ ของคุณ (ขึ้นอยู่กับวิธีที่ฐานข้อมูลตัดสินใจที่จะสแกนตาราง) | สําหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบสําหรับผลิตภัณฑ์ฐานข้อมูลเชิงสัมพันธ์พื้นฐาน |
| ลอง | ใช้ในการจัดการข้อยกเว้น | จัดการข้อยกเว้นด้วยการพยายามและจับคําสําคัญ |
| กลับ | ส่งกลับจากวิธีการ | การประกาศวิธีการ |
| พลิกกลับ | เรกคอร์ดจะถูกส่งกลับในลําดับย้อนกลับ | เลือกไวยากรณ์คําสั่ง |
| เลือก | คําสั่ง select ย่อยระบุว่าคอลัมน์หรือมุมมองใดจะแสดงในชุดผลลัพธ์ |
เลือกคําสั่ง |
| เซิร์ฟเวอร์ | ตัวแก้ไขเมธอด ตัวปรับเปลี่ยนนี้จะถูกละเว้นและไม่ควรใช้เนื่องจากวิธีทั้งหมดจะดําเนินการในฝั่งเซิร์ฟเวอร์ | ตัวแก้ไขวิธีการ |
| ฉาก | ใช้กับคําสั่ง update_recordset | update_recordset |
| คง | เมทอดแบบคงที่อาจไม่อ้างอิงถึงตัวแปรอินสแตนซ์ (เฉพาะตัวแปรคงที่) อาจถูกเรียกใช้โดยใช้ชื่อคลาสแทนที่จะเป็นบนอินสแตนซ์ของคลาส ("MyClass.aStaticProcedure") |
ตัวแก้ไขวิธีการ |
| str |
stringกําหนดชนิด |
พันธะ |
| ยอดรวม | ส่งกลับผลรวมของเขตข้อมูลจากแถวที่ระบุโดย group by ส่วนคําสั่งใน select คําสั่ง |
เลือกไวยากรณ์คําสั่ง |
| ซูเปอร์ | เรียกใช้เมธอด ที่แทนที่ด้วยวิธีการปัจจุบัน | วิธีการตาราง |
| เปลี่ยน | คําสั่งสลับ | เปลี่ยนคําสั่ง |
| tableLock | ล้าสมัย; tableLock ไม่พร้อมใช้งานอีกต่อไป | |
| นี้ | การอ้างอิงถึงอินสแตนซ์ปัจจุบันของคลาส ใช้ในรหัส X++ ภายในเมธอดอินสแตนซ์ของคลาส ใช้เพื่ออ้างอิงสมาชิก วิธีการ ของคลาส | |
| ขว้าง | ใช้ในการจัดการข้อยกเว้น | จัดการข้อยกเว้นด้วยการพยายามและจับคําสําคัญ |
| จริง | สัญพจน์บูลีน | บูลีน |
| พยายาม | ใช้ในการจัดการข้อยกเว้น | จัดการข้อยกเว้นด้วยการพยายามและจับคําสําคัญ |
| ttsAbort | ย้อนกลับ (เช่น ละทิ้ง) การเปลี่ยนแปลงทั้งหมดในธุรกรรมปัจจุบัน | ความสมบูรณ์ของธุรกรรม |
| ttsBegin | ทําเครื่องหมายจุดเริ่มต้นของธุรกรรม | ความสมบูรณ์ของธุรกรรม |
| ttsCommit | ทําเครื่องหมายจุดสิ้นสุดของธุรกรรม เพื่อยืนยันการเปลี่ยนแปลงไปยังตาราง | ความสมบูรณ์ของธุรกรรม |
| update_recordset | อนุญาตให้จัดการชุดแถวภายในการดําเนินการเดียว | update_recordset |
| validTimeState | กรองแถวที่ดึงมาจากตารางสถานะเวลาที่ถูกต้องโดยคําสั่ง X++ SQL select ตัวอย่างเช่น: เลือก validTimeState(myDateEffective) * จาก xMyTable; ... หรือ เลือก validTimeState(myDateFrom, myDateTo) * จาก xMyTable; |
ผลกระทบของตารางสถานะเวลาที่ถูกต้องในการดําเนินการอ่านและเขียน |
| โมฆะ | ระบุวิธีการที่ไม่ส่งกลับค่า | การประกาศวิธีการ |
| ที่ไหน | ส่วนหนึ่งของ select คําสั่ง ส่วน where คําสั่งระบุเงื่อนไขที่จะพึงพอใจ นั่นคือแถวที่คุณต้องการรวมในผลลัพธ์ |
เลือกไวยากรณ์คําสั่ง |
| ขณะ | คําสั่งการทําซ้ํา ดําเนินการคําสั่งซ้ําๆ ตราบเท่าที่สภาพการทดสอบเป็นจริง | ขณะที่วนรอบขณะที่เลือกคําสั่ง |
| หน้าต่าง | ช่วยให้คุณสามารถเปลี่ยนขนาดของหน้าต่างเอาต์พุตได้ ใช้กับ รายงานการพิมพ์</พิมพ์> ที่ไม่แนะนําในรหัสการผลิต |
พิมพ์รายงาน |
ไวยากรณ์นิพจน์
นิพจน์ใน X++ จะถูกใช้ในลักษณะทางคณิตศาสตร์หรือเชิงตรรกะ นิพจน์ถูกสร้างบนชนิดข้อมูลของภาษา ซึ่งนิพจน์ดังกล่าวถูกสร้างด้วยการใช้ตัวแปรตัวแปรและนิพจน์อื่น ๆ นั่นคือนิพจน์จะส่งกลับค่าของบางชนิดเสมอ ค่านี้สามารถใช้ในการคํานวณ การกําหนด คําสั่งแบบมีเงื่อนไข และอื่นๆ
คําอธิบาย EBNF ของนิพจน์ใน X++
| เงื่อนไข | คำจำกัดความ | |
|---|---|---|
| นิพจน์ | = | นิพจน์รูปแบบธรรมดา [RelationalOperator Simple-expression ] |
| RelationalOperator | = | = |
| นิพจน์ธรรมดา | = | นิพจน์ธรรมดา [ + |
| เงื่อนไข | = | Compfactor { Mult-operator CompFactor } |
| ตัวดําเนินการ Mult | = | * |
| การทํางานที่สอดคล้อง | = | [ ! ] [ - |
| ตัวแปร | = | ตัว อักษร |
| Enum | = | EnumName :: สัญพจน์ |
| ตัวแปร | = | ตัวระบุ [ นิพจน์ ] [ นิพจน์ ] |
| FunctionCall | = | [ นิพจน์ (. |
| If-expression | = | สีหน้า นิพจน์ : นิพจน์ |
ข้อจํากัดความหมายใช้กับไวยากรณ์ก่อนหน้านี้ คุณไม่สามารถเรียกใช้วิธีใดก็ได้โดยใช้ :: operator ในทํานองเดียวกัน คุณไม่สามารถใช้คําสําคัญ นี้ โดยไม่มีวัตถุที่ใช้งานอยู่ได้ นั่นคือถ้าคุณไม่ได้อยู่ภายในเมธอดอินสแตนซ์และอื่น ๆ
ตัวอย่างเช่น
| ตัวอย่างของนิพจน์ | คำอธิบาย |
|---|---|
1 |
สัญพจน์จํานวนเต็ม |
| NoYes::No | การอ้างอิง enum |
A |
การอ้างอิงตัวแปร |
| หนี้: หา( "1") | static method-call (ส่งกลับตัวแปรลูกค้า) |
| (A > 3 ? จริง : เท็จ) | if-expression ที่ส่งกลับ true หรือ false |
| (เลือก CustTable ที่ CustTable.Account == "100") NameRef | select-expression ส่งกลับเขตข้อมูล nameref ในตารางลูกค้า นี่คือสตริง |
| A >= B | นิพจน์ตรรกะ แสดงค่าจริงหรือเท็จ |
| A + B | นิพจน์ทางคณิตศาสตร์ ผลรวม A และ B |
| A + B / C | คํานวณ B/C แล้วเพิ่มสิ่งนี้ไปยัง A |
| ~ A + สิ่งนี้ Value() | รวมไบนารีไม่ใช่ A และผลลัพธ์ของค่าการเรียกเมธอด บนวัตถุในขอบเขต (นี้) |
| หนี้: หา( "1") NameRef | ส่งกลับเขตข้อมูล NameRef ของเรกคอร์ดลูกค้าที่พบ |
| หนี้: หา( "1") Balance() | การเรียกเมธอด ไปที่ Balance ในตารางลูกค้า (หนี้::ค้นหาส่งกลับลูกค้า) ส่งกลับยอดดุลของลูกค้าที่มีหมายเลขบัญชี 1 |
ภาพรวม EBNF
Extended Backus Naur Form (EBNF) เป็น metalanguage และใช้ในคู่มือนี้เพื่ออธิบายไวยากรณ์ภาษา ข้อกําหนด EBNF ประกอบด้วยกฎการผลิต นอร์มอล และเทอร์มินัล คําศัพท์สําคัญจะแสดงในตารางต่อไปนี้
| เงื่อนไขสำคัญ | ตัวอย่าง | คำอธิบาย |
|---|---|---|
| อาคาร ผู้ โดยสาร | Work_Team | เทอร์มินัลคืออักขระหนึ่งตัวหรือสตริงของอักขระที่ไม่มีการเปลี่ยนแปลง |
| Nonterminals | Employee |
nonterminal คือคําอธิบายของส่วนหนึ่งของประโยคที่ถูกต้องในภาษาที่ถูกกําหนดโดยกฎการผลิตหรือคําอธิบายข้อความ สัญลักษณ์ที่ไม่ใช่เชิงกําหนดสามารถขยายเป็นสัญลักษณ์ที่เป็นเทอร์มินัลอย่างน้อยหนึ่งสัญลักษณ์ได้เสมอ |
| กฎการผลิต | พนักงาน = นักพัฒนา | ทดสอบ |
ตัวอย่าง
Work_Team = พนักงานผู้จัดการ {, พนักงาน} พนักงาน = นักพัฒนา | นักพัฒนา Tester ตัวอย่างนี้กําหนด Work_Team เป็นประกอบด้วย Manager และ อย่างน้อยหนึ่ง Employeesรายการ
Employeeถูกกําหนดเป็น DeveloperหรือTester สัญลักษณ์ที่ใช้ในตัวอย่างจะอธิบายไว้ในตารางต่อไปนี้
สัญลักษณ์พิเศษใน EBNF
| สัญลักษณ์ | คำอธิบาย |
|---|---|
| (นิพจน์) | เครื่องหมายวงเล็บเก็บสัญลักษณ์ (เทอร์มินัลและไม่ใช่เทอร์มินัล) ไว้ด้วยกัน พวกเขาสามารถวางไว้ที่ใดก็ได้ทางด้านขวาของกฎการผลิต |
| Expression1 | Expression2 |
| [Expression] | ตัวเลือก: รายการระหว่าง [ และ ] เป็นตัวเลือก รายการทั้งหมดในวงเล็บปีกกาถูกรวมไว้ |
| {Expression} | ทําซ้ํา: รายการระหว่าง { และ } เป็นตัวเลือก แต่สามารถทําซ้ําได้หลายครั้งตามที่จําเป็น |
ตัวอย่างเช่น หากอุปกรณ์เสริมที่คุณซื้อสําหรับจักรยานของคุณประกอบด้วยอานผู้ถือขวดน้ําระฆังและแตรและคุณอาจมีระฆังหรือแตรและศูนย์ที่ยึดขวดน้ําหนึ่งตัวหรือมากกว่าและอานเดียวอาจแสดงเป็น: Bicycle_Accessories = อาน [ระฆัง | แตร] {water_bottle_holders} ไวยากรณ์นี้กําหนดความเป็นไปได้ดังต่อไปนี้: saddlesaddle bellsaddle horn อาน water_bottle_holder อานระฆัง water_bottle_holder อานระฆัง water_bottle_holder water_bottle_holder และอื่น ๆ
ไวยากรณ์ X++
บทความนี้แสดงไวยากรณ์อย่างเป็นทางการของภาษา X++
วิธีการแปลไวยากรณ์ BNF อย่างเป็นทางการ
ส่วนนี้จะอธิบายไวยากรณ์ของ X++ ใน Backus Naur Form (BNF) มีการอธิบายตัวอย่างขนาดเล็กของ BNF ไว้ที่นี่
AA ::= BB CC_SYM
BB ::= JJ_SYM
::= KK_SYM
AA คือชื่อของกฎการผลิต
AAจําเป็นต้องมี BBตามด้วย CC_SYM
BBยังเป็นกฎการผลิต ดังนั้น BB จึงไม่ใช่เทอร์มินัล
BB ต้องเป็น JJ_SYM หรือ KK_SYM ทั้ง JJ_SYM และ KK_SYM เป็นเทอร์มินัลเนื่องจากไม่ใช่ชื่อของกฎการผลิตอื่น ๆ CC_SYM ยังเป็นเทอร์มินัล
ในไวยากรณ์ BNF สําหรับ X++ เทอร์มินัลส่วนใหญ่มี_SYM เป็นส่วนต่อท้ายของชื่อ
ไวยากรณ์ X++ ทางการใน BNF
ส่วนนี้ประกอบด้วย BNF ที่กําหนดไวยากรณ์ของ X++
CMPL_UNIT ::= RETTYPEID FUNC_HDR FUNC_HEAD BODY
::= RETTYPEID DATA_HDR CLASS_DECL
::= EXPR_HDR IF_EXPR SEMIOPT
::= RETTYPEID FUNC_HDR EVENT_DECL BODY
SEMIOPT ::= SEMICOLON_SYM
::=
CLASS_DECL ::= CLASS_HEADER LEFTBR_SYM DCL_EVENTMAP DCL_LIST RIGHTBR_SYM
CLASS_HEADER ::= ATTRIBUTE_DEF CLASS_MODIFIERS CLASSORINTERFACE STD_ID EXTENDS IMPLEMENTS
ATTRIBUTE_DEF ::= LEFT_BRKT_SYM ATTRIBUTE_INIT ATTRIBUTE_LIST RETTYPEID RGHT_BRKT_SYM
::=
ATTRIBUTE_INIT ::=
.
ATTRIBUTE_LIST ::= ATTRIBUTE
::= ATTRIBUTE_LIST LIST_SEP_SYM ATTRIBUTE
ATTRIBUTE ::= STD_ID
::= ATTRIBUTE_WITH_ARGS_BEGINS ATTRIBUTE_WITH_ARGS_ENDS
ATTRIBUTE_WITH_ARGS_BEGINS ::= STD_ID LEFT_PAR_SYM
ATTRIBUTE_WITH_ARGS_ENDS ::= ATTRIBUTE_ARGS RGHT_PAR_SYM
ATTRIBUTE_ARGS ::= ATTRIBUTE_CONSTANT
::= ATTRIBUTE_ARGS LIST_SEP_SYM ATTRIBUTE_CONSTANT
ATTRIBUTE_CONSTANT ::= INT_SYM
::= DBL_SYM
::= STR_SYM
::= DATE_SYM
::= DATETIME_SYM
::= STD_ID DBLCOLON_SYM STD_ID
::= TRUE_SYM
::= FALSE_SYM
::= INT64_SYM
::= ATTRIBUTE_INTRINSIC
ATTRIBUTE_INTRINSIC ::= INTRI_ID LEFT_PAR_SYM IARGS RGHT_PAR_SYM
CLASSORINTERFACE ::= CLASS_SYM
::= INTERFACE_SYM
CLASS_MODIFIERS ::= CLASS_MODS
::=
CLASS_MODS ::= CLASS_MODIFIER
::= CLASS_MODS RETTYPEID CLASS_MODIFIER
CLASS_MODIFIER ::= PUBLIC_SYM
::= FINAL_SYM
::= STATIC_SYM
::= ABSTRACT_SYM
::= PRIVATE_SYM
EXTENDS ::= EXTENDS_SYM STD_ID
::=
IMPLEMENTS ::= IMPLEMENTS_SYM IMPLEMENTLIST
::=
IMPLEMENTLIST ::= STD_ID
::= IMPLEMENTLIST LIST_SEP_SYM STD_ID
DCL_EVENTMAP ::=
EVENT_DECL ::= ATTRIBUTE_DEF EVENT_HEADER PARM_DCL_LIST
EVENT_HEADER ::= EVENT_MODIFIER VOID_TYPE_SYM STD_ID
EVENT_MODIFIER ::= EVENT_SYM
FUNC_HEAD ::= ATTRIBUTE_DEF FUNCNAME PARM_DCL_LIST
FUNCNAME ::= FUNCTYPE STD_ID
FUNCTYPE ::= FUNC_MODIFIERS DECL_TYPE
FUNC_MODIFIERS ::= FUNC_MODS
::=
FUNC_MODS ::= RETTYPEID FUNC_MODIFIER
::= FUNC_MODS RETTYPEID FUNC_MODIFIER
FUNC_MODIFIER ::= PUBLIC_SYM
::= PRIVATE_SYM
::= PROTECTED_SYM
::= FINAL_SYM
::= STATIC_SYM
::= ABSTRACT_SYM
::= DISPLAY_SYM
::= EDIT_SYM
::= SERVER_SYM
::= CLIENT_SYM
BODY ::= LEFTBR_SYM DCL_FUNC_LIST SEMIOPT SECAUTHZCHECK STMTLIST SECAUTHZEND RIGHTBR_SYM
SECAUTHZCHECK ::=
SECAUTHZEND ::=
RETTYPEID ::=
FUNCTION_DEF ::= FUNC_HEADER PARM_DCL_LIST LOCAL_BODY
FUNC_HEADER ::= DECL_TYPE STD_ID
PARM_DCL_LIST ::= RETTYPEID PARM_START PARM_LIST_OPT RGHT_PAR_SYM RETTYPEID
PARM_START ::= LEFT_PAR_SYM
PARM_LIST_OPT ::= PARM_LIST
::=
PARM_LIST ::= DCL_INIT
::= PARM_LIST LIST_SEP_SYM DCL_INIT
LOCAL_BODY ::= LEFTBR_SYM DCL_LIST SEMIOPT STMTLIST RETTYPEID RIGHTBR_SYM
DCL_LIST ::= DCL_LIST2
::=
DCL_LIST2 ::= DCL_STMT
::= DCL_LIST2 DCL_STMT
DCL_FUNC_LIST ::= DCL_FUNC_LIST2
::=
DCL_FUNC_LIST2 ::= DCL_STMT
::= FUNCTION_DEF
::= DCL_FUNC_LIST2 DCL_STMT
::= DCL_FUNC_LIST2 FUNCTION_DEF
DCL_STMT ::= DCL_INIT_LIST RETTYPEID SEMICOLON_SYM
DCL_INIT_LIST ::= DCL_INIT
::= DCL_CLIST ASG_CLAUSE
DCL_CLIST ::= DCL_INIT_LIST LIST_SEP_SYM STD_ID ARR_DCL_IDX
DCL_INIT ::= DECL ASG_CLAUSE
DECL ::= DECL_TYPE STD_ID ARR_DCL_IDX
DECL_TYPE ::= STR_TYPE_SYM STR_LEN
::= INT_TYPE_SYM
::= DBL_TYPE_SYM
::= DATE_TYPE_SYM
::= DATETIME_TYPE_SYM
::= TYPE_ID
::= QUEUE_TYPE_SYM
::= VOID_TYPE_SYM
::= ANY_TYPE_SYM
::= GUID_TYPE_SYM
::= INT64_TYPE_SYM
::= CLR_TYPE
CLR_TYPE ::= CLR_NAMESPACE TYPE_ID CLR_ARRAY_TYPE_EXT
::= CLR_NAMESPACE CLR_TYPE
CLR_NAMESPACE ::= TYPE_ID PERIOD_SYM
CLR_ARRAY_TYPE_EXT ::= CLR_ARRAY_SPEC
::=
CLR_ARRAY_SPEC ::= CLR_ARRAY_PART
::= CLR_ARRAY_SPEC CLR_ARRAY_PART
CLR_ARRAY_PART ::= CLR_ARRAY_LEFT_PART CLR_RECTANGULAR_LIST RGHT_BRKT_SYM
CLR_ARRAY_LEFT_PART ::= LEFT_BRKT_SYM
CLR_RECTANGULAR_LIST ::= CLR_COMMA_LIST
::=
CLR_COMMA_LIST ::= LIST_SEP_SYM
::= CLR_COMMA_LIST LIST_SEP_SYM
STR_LEN ::= INT_SYM
::=
ARR_DCL_IDX ::= LEFT_BRKT_SYM RANGE ARRAY_MEM RGHT_BRKT_SYM
::=
RANGE ::= IF_EXPR
::=
ARRAY_MEM ::= LIST_SEP_SYM IF_EXPR
::=
ASG_CLAUSE ::= INIT_START IF_EXPR
::=
INIT_START ::= ASG_SYM
ASG_STMT ::= LVAL_FLD ASSIGN IF_EXPR
::= LVAL_LIST ASG_SYM IF_EXPR
::= LVAL_FLD ASG_INC_DEC
::= ASG_INC_DEC LVAL_FLD
::= LVAL_FLD ASG_EVENT_HANDLER
ASSIGN ::= ASG_SYM
::= ASGINC_SYM
::= ASGDEC_SYM
ASG_INCDEC ::= ASGINC_SYM
::= ASGDEC_SYM
ASG_EVENT_HANDLER ::= ASG_INCDEC EVENTHANDLER_SYM LEFT_PAR_SYM QUALIFIER STD_ID RGHT_PAR_SYM
::= ASG_INCDEC EVENTHANDLER_SYM LEFT_PAR_SYM STD_ID DBLCOLON_SYM STD_ID RGHT_PAR_SYM
::= ASG_INCDEC EVENTHANDLER_SYM LEFT_PAR_SYM QUALIFIER EVAL_CLR_TYPE DBLCOLON_SYM STD_ID RGHT_PAR_SYM
ASG_INC_DEC ::= INC_SYM
::= DEC_SYM
LVAL_FLD ::= FIELD
LVAL_START ::= LEFT_BRKT_SYM
LVAL_LIST ::= LVAL_START LVALUES RGHT_BRKT_SYM
LVALUE ::= FIELD
LVALUES ::= LVALUE
::= LVALUES NEXTLVAL LVALUE
NEXTLVAL ::= LIST_SEP_SYM
IF_EXPR ::= COND_TRUE IF_EXPR
::= BOOL_EXPR
COND_TRUE ::= COND_TEST IF_EXPR COLON_SYM
COND_TEST ::= BOOL_EXPR QUEST_SYM
BOOL_EXPR ::= BOOL_EXPR LOGOP EXPR
::= EXPR
LOGOP ::= AND_SYM
::= OR_SYM
EXPR ::= SMPL_EXPR RELOP SMPL_EXPR
::= SMPL_EXPR AS_SYM STD_ID
::= SMPL_EXPR IS_SYM STD_ID
::= SMPL_EXPR AS_SYM EVAL_CLR_TYPE
::= SMPL_EXPR IS_SYM EVAL_CLR_TYPE
::= SMPL_EXPR
RELOP ::= LT_SYM
::= LE_SYM
::= EQ_SYM
::= NE_SYM
::= GT_SYM
::= GE_SYM
::= LIKE_SYM
SMPL_EXPR ::= SMPL_EXPR ADDOP TERM
::= TERM
ADDOP ::= PLUS_SYM
::= MINUS_SYM
::= PHYSOR_SYM
TERM ::= TERM MULOP CMPL_FACT
::= CMPL_FACT
MULOP ::= MULT_SYM
::= DIV_SYM
::= MOD_SYM
::= INTDIV_SYM
::= SHIFTL_SYM
::= SHIFTR_SYM
::= PHYSAND_SYM
::= PHYSXOR_SYM
CMPL_FACT ::= NOT_SYM SGND_FACT
::= SGND_FACT
SGND_FACT ::= SIGNOP FACTOR
::= FACTOR
SIGNOP ::= UMINUS_SYM
::= PHYSNOT_SYM
FACTOR ::= LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
::= CONSTANT
::= FIELD
::= DIRSEARCH
::= FUNCTION
::= INTRINSICS
::= EVAL
::= CONLITTERAL
::= NEW_CLR_ARRAY
NEW_CLR_ARRAY ::= NEW_SYM EVAL_CLR_TYPE NEW_CLR_ARRAY_PART LEFT_PAR_SYM RGHT_PAR_SYM
NEW_CLR_ARRAY_PART ::= CLR_SIZED_ARRAY CLR_NOSIZED_ARRAY_SPEC
CLR_SIZED_ARRAY ::= LEFT_BRKT_SYM CLR_SMPL_EXPR_COMMA_LIST RGHT_BRKT_SYM
CLR_SMPL_EXPR_COMMA_LIST ::= SMPL_EXPR
::= CLR_SMPL_EXPR_COMMA_LIST LIST_SEP_SYM SMPL_EXPR
CLR_NOSIZED_ARRAY_SPEC ::= CLR_NOSIZED_ARRAY_LIST
::=
CLR_NOSIZED_ARRAY_LIST ::= CLR_NOSIZED_ARRAY
::= CLR_NOSIZED_ARRAY_LIST CLR_NOSIZED_ARRAY
CLR_NOSIZED_ARRAY ::= LEFT_BRKT_SYM CLR_EMPTY_COMMA_LIST RGHT_BRKT_SYM
CLR_EMPTY_COMMA_LIST ::= CLR_EMPTY_RECT_COMMA_LIST
::=
CLR_EMPTY_RECT_COMMA_LIST ::= LIST_SEP_SYM
::= CLR_EMPTY_RECT_COMMA_LIST LIST_SEP_SYM
CONLITTERAL ::= LEFT_BRKT_SYM IF_EXPR EXPR_LIST RGHT_BRKT_SYM
CONSTANT ::= INT_SYM
::= DBL_SYM
::= STR_SYM
::= DATE_SYM
::= DATETIME_SYM
::= STD_ID DBLCOLON_SYM STD_ID
::= TRUE_SYM
::= FALSE_SYM
::= NULL_SYM
::= INT64_SYM
::= QUALIFIER EVAL_CLR_TYPE DBLCOLON_SYM STD_ID
::= QUALIFIER STD_ID DBLCOLON_SYM STD_ID
DIRSEARCH ::= DIRS_HEADER PERIOD_SYM STD_ID ARR_IDX
::= DIRS_HEADER PERIOD_SYM FLD_NUM ARR_IDX
DIRS_HEADER ::= LEFT_PAR_SYM SET_DIRS FIND_JOIN RGHT_PAR_SYM
SET_DIRS ::=
FIELD ::= QUALIFIER STD_ID ARR_IDX
::= QUALIFIER FLD_NUM ARR_IDX
::= STD_ID ARR_IDX
QUALIFIER ::= EVAL PERIOD_SYM
::= STD_ID PERIOD_SYM
FLD_NUM ::= LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
ARR_IDX ::= LEFT_BRKT_SYM SMPL_EXPR RGHT_BRKT_SYM
::=
EXPR_LIST ::= EXPR_LIST2
::=
EXPR_LIST2 ::= LIST_SEP_SYM IF_EXPR
::= EXPR_LIST2 LIST_SEP_SYM IF_EXPR
FUNCTION ::= FUNC_ID LEFT_PAR_SYM EVAL_FUNCTION_NAME PAR_LIST RGHT_PAR_SYM
EVAL_FUNCTION_NAME ::=
EVAL_NAME ::= EVAL_ID LEFT_PAR_SYM
::= STD_ID LEFT_PAR_SYM
::= STD_ID DBLCOLON_SYM STD_ID LEFT_PAR_SYM
::= SUPER_SYM LEFT_PAR_SYM
::= NEW_SYM STD_ID LEFT_PAR_SYM
::= NEW_SYM EVAL_CLR_TYPE LEFT_PAR_SYM
::= QUALIFIER EVAL_CLR_TYPE DBLCOLON_SYM STD_ID LEFT_PAR_SYM
::= QUALIFIER STD_ID LEFT_PAR_SYM
::= QUALIFIER STD_ID DBLCOLON_SYM STD_ID LEFT_PAR_SYM
EVAL_CLR_TYPE ::= NAMESPACE STD_ID
::= NAMESPACE EVAL_CLR_TYPE
NAMESPACE ::= STD_ID PERIOD_SYM
EVAL ::= EVAL_NAME PAR_LIST RGHT_PAR_SYM
PAR_LIST ::= PRM_LIST
::=
PRM_LIST ::= PAR_ELEM
::= PRM_LIST LIST_SEP_SYM PAR_ELEM
PAR_ELEM ::= IF_EXPR
::= BYREF_SYM FIELD
INTRINSICS ::= INTRI_ID LEFT_PAR_SYM IARGS RGHT_PAR_SYM
IARGS ::= STD_ID
::= STR_SYM
::= STD_ID LIST_SEP_SYM STD_ID
::=
STMTLIST ::= STATEMENTS
::=
STATEMENTS ::= STATEMENT
::= STATEMENTS STATEMENT
STATEMENT ::= COMPOUND_STMT
::= WHILE_STMT
::= FOR_STMT
::= DO_STMT
::= SEARCH_STMT
::= FIND_STMT
::= PRINT_STMT
::= WINDOW_STMT
::= IF_STMT
::= SWITCH_STMT
::= EXPR_STMT
::= PAUSE_STMT
::= BP_CLAUSE
::= BREAK_STMT
::= CONTINUE_STMT
::= RETURN_CLAUSE
::= MOVE_REC_STMT
::= THROW_STMT
::= TRY_STMT
::= RETRY_STMT
::= TTS_STMT
::= FLUSH_STMT
::= TBLLOCK_STMT
::= CHANGE_STMT
::= UPDATE_STMT
::= INSERT_STMT
::= UNCHECKED_STMT
COMPOUND_STMT ::= LEFTBR_SYM STMTLIST RIGHTBR_SYM
THROW_STMT ::= THROW_SYM IF_EXPR SEMICOLON_SYM
TRY_STMT ::= TRY_BLOCK CATCH_LIST
TRY_BLOCK ::= TRY_START STATEMENT
TRY_START ::= TRY_SYM
CATCH_LIST ::= CATCH_STMT
::= CATCH_LIST CATCH_STMT
CATCH_STMT ::= CATCH_EXPR PRE_CATCH STATEMENT POST_CATCH
CATCH_EXPR ::= CATCH_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
::= CATCH_SYM LEFT_PAR_SYM IF_EXPR LIST_SEP_SYM TABLEINSTANCE RGHT_PAR_SYM
::= CATCH_SYM
PRE_CATCH ::=
POST_CATCH ::=
TABLEINSTANCE ::= INSTANCENAME
INSTANCENAME ::= QUALIFIER STD_ID ARR_IDX
::= STD_ID ARR_IDX
RETRY_STMT ::= RETRY_SYM SEMICOLON_SYM
WHILE_STMT ::= WHILE_TEST STATEMENT
WHILE_TEST ::= WHILE LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
WHILE ::= WHILE_SYM
DO_STMT ::= DO_BODY DO_TEST SEMICOLON_SYM
DO_BODY ::= DO_HEADER STATEMENT
DO_HEADER ::= DO_SYM
DO_TEST ::= WHILE_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
FOR_STMT ::= FOR_HEADER STATEMENT
FOR_HEADER ::= FOR_TEST SEMICOLON_SYM FOR_ASG RGHT_PAR_SYM
FOR_TEST ::= FOR_INIT SEMICOLON_SYM IF_EXPR
FOR_INIT ::= FOR_SYM LEFT_PAR_SYM FOR_ASG
FOR_ASG ::= LVAL_FLD ASSIGN IF_EXPR
::= LVAL_FLD ASG_INC_DEC
::= ASG_INC_DEC LVAL_FLD
JOIN_LIST ::= JOIN_SPECS
::=
JOIN_SPECS ::= JOIN_SPEC
::= JOIN_SPECS JOIN_SPEC
JOIN_SPEC ::= JOIN_ORDER WHERE IF_EXPR
::= JOIN_ORDER
JOIN_ORDER ::= JOIN_USING
::= JOIN_USING ORDER_GROUP
JOIN_USING ::= JOIN_CLAUSE USING_INDEX STD_ID
::= JOIN_CLAUSE USING_INDEX HINT_SYM STD_ID
::= JOIN_CLAUSE
JOIN_CLAUSE ::= OUTER JOIN_SYM SELECTOPT TABLE
OUTER ::= OUTER_SYM
::= EXISTS_SYM
::= NOTEXISTS_SYM
::=
SEARCH_STMT ::= SEARCH_JOIN STATEMENT
SEARCH_JOIN ::= SEARCH_WHERE JOIN_LIST
SEARCH_WHERE ::= SEARCH_ORDER WHERE IF_EXPR
::= SEARCH_ORDER
WHERE ::= WHERE_SYM
SUM_ELEM ::= SUM_FUNC LEFT_PAR_SYM STD_ID RGHT_PAR_SYM
SUM_FUNC ::= SUM_SYM
::= AVG_SYM
::= CNT_SYM
::= MINOF_SYM
::= MAXOF_SYM
SEARCH_ORDER ::= SEARCH_USING
::= SEARCH_USING ORDER_GROUP
ORDER_GROUP ::= ORDERBY_CLAUSE OPT_GROUPBY
::= GROUPBY_CLAUSE OPT_ORDERBY
OPT_GROUPBY ::= GROUPBY_CLAUSE
::=
OPT_ORDERBY ::= ORDERBY_CLAUSE
::=
ORDERBY_CLAUSE ::= ORDER_SYM OPT_BY ORDER_ELEM
::= ORDERBY_CLAUSE LIST_SEP_SYM ORDER_ELEM
GROUPBY_CLAUSE ::= GROUP_SYM OPT_BY ORDER_ELEM
::= GROUPBY_CLAUSE LIST_SEP_SYM ORDER_ELEM
ORDER_ELEM ::= STD_ID INDEX DIRECTION
::= ORDER_QUALIFIER STD_ID INDEX DIRECTION
ORDER_QUALIFIER ::= STD_ID PERIOD_SYM
INDEX ::= LEFT_BRKT_SYM INT_SYM RGHT_BRKT_SYM
::=
DIRECTION ::= ASCEND_SYM
::= DESCEND_SYM
::=
OPT_BY ::= BY_SYM
::=
SEARCH_USING ::= SEARCH_CLAUSE USING_INDEX STD_ID
::= SEARCH_CLAUSE USING_INDEX HINT_SYM STD_ID
::= SEARCH_CLAUSE
USING_INDEX ::= INDEX_SYM
SEARCH_CLAUSE ::= WHILE_SYM SELECT_SYM SELECTOPT CROSSCOMPANY_CLAUSE VALIDTIMESTATE_CLAUSE TABLE
CROSSCOMPANY_CLAUSE ::= CROSSCOMPANY_SYM
::= CROSSCOMPANY_SYM COLON_SYM STD_ID
::=
VALIDTIMESTATE_CLAUSE ::= VALIDTIMESTATE_SYM LEFT_PAR_SYM STD_ID LIST_SEP_SYM STD_ID RGHT_PAR_SYM
::= VALIDTIMESTATE_SYM LEFT_PAR_SYM STD_ID RGHT_PAR_SYM
::=
SELECTOPT ::=
::= SELECTOPT REVERSE_SYM
::= SELECTOPT FIRSTFAST_SYM
::= SELECTOPT FIRSTONLY_SYM
::= SELECTOPT FIRSTONLY_SYM1
::= SELECTOPT FIRSTONLY_SYM10
::= SELECTOPT FIRSTONLY_SYM100
::= SELECTOPT FIRSTONLY_SYM1000
::= SELECTOPT FORUPDATE_SYM
::= SELECTOPT NOFETCH_SYM
::= SELECTOPT FORCE_SELECT_ORDER_SYM
::= SELECTOPT FORCE_NESTED_LOOP_SYM
::= SELECTOPT FORCE_LITERALS_SYM
::= SELECTOPT FORCE_PLACEHOLDERS_SYM
::= SELECTOPT REPEATABLEREAD_SYM
::= SELECTOPT OPTIMISTICLOCK_SYM
::= SELECTOPT PESSIMISTICLOCK_SYM
::= SELECTOPT GENERATEONLY_SYM
FIND_STMT ::= FIND_JOIN SEMICOLON_SYM
FIND_JOIN ::= FIND_WHERE JOIN_LIST
FIND_WHERE ::= FIND_ORDER WHERE IF_EXPR
::= FIND_ORDER
FIND_ORDER ::= FIND_USING
::= FIND_USING ORDER_GROUP
FIND_USING ::= FIND_TABLE USING_INDEX STD_ID
::= FIND_TABLE USING_INDEX HINT_SYM STD_ID
::= FIND_TABLE
FIND_TABLE ::= SELECT_SYM SELECTOPT CROSSCOMPANY_CLAUSE VALIDTIMESTATE_CLAUSE TABLE
::= DELETE_SYM SELECTOPT CROSSCOMPANY_CLAUSE VALIDTIMESTATE_CLAUSE TABLE
TABLE ::= FLD_LIST OPT_FROM
FLD_LIST ::= MULT_SYM
::= FIELD_LIST
FIELD_LIST ::= FIELD_SPEC
::= FIELD_LIST LIST_SEP_SYM FIELD_SPEC
FIELD_SPEC ::= STD_ID INDEX
::= SUM_ELEM
OPT_FROM ::= FROM_SYM STD_ID
::=
SETFIELDSMODE ::=
UPDATE_STMT ::= UPDATETABLE SET_SYM SETFIELDSMODE FIELDASSIGNMENTS OPT_WHERE JOIN_LIST SEMICOLON_SYM
UPDATETABLE ::= UPDATE_SYM SELECTOPT CROSSCOMPANY_CLAUSE STD_ID
OPT_WHERE ::= WHERE IF_EXPR
::=
FIELDASSIGNMENTS ::= FIELDASSIGNMENTS LIST_SEP_SYM FIELDASSIGNMENT
::= FIELDASSIGNMENT
FIELDASSIGNMENT ::= STD_ID INDEX ASG_SYM IF_EXPR
INSERT_PART ::= INSERT_SYM CROSSCOMPANY_CLAUSE INSERT_NAME LEFT_PAR_SYM INSERTFIELDLIST RGHT_PAR_SYM
INSERT_NAME ::= STD_ID
INSERT_STMT ::= INSERT_PART FIND_JOIN SEMICOLON_SYM
INSERTFIELDLIST ::= INSERTFIELD
::= INSERTFIELDLIST LIST_SEP_SYM INSERTFIELD
INSERTFIELD ::= STD_ID INDEX
PRINT_STMT ::= PRINT_CLAUSE AT_CLAUSE SEMICOLON_SYM
PRINT_CLAUSE ::= PRINT IF_EXPR EXPR_LIST
PRINT ::= PRINT_SYM
AT_CLAUSE ::= AT_SYM IF_EXPR LIST_SEP_SYM IF_EXPR
::=
WINDOW_STMT ::= WINDOW_SYM IF_EXPR LIST_SEP_SYM IF_EXPR AT_CLAUSE SEMICOLON_SYM
IF_STMT ::= ELSE_STMT
::= IF_CONDS
IF_CONDS ::= IF_COND STATEMENT
IF_COND ::= IF_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
ELSE_STMT ::= ELSE STATEMENT
ELSE ::= IF_CONDS ELSE_SYM
SWITCH_STMT ::= CASE_LIST RIGHTBR_SYM
CASE_LIST ::= SWITCH_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM LEFTBR_SYM
::= CASE_TESTS STMTLIST
CASE_TESTS ::= CASE_HEADER COLON_SYM
::= CASE_LIST DEFAULT_SYM COLON_SYM
CASE_HEADER ::= CASE IF_EXPR
::= CASEALT IF_EXPR
CASE ::= CASE_LIST CASE_SYM
CASEALT ::= CASE_HEADER LIST_SEP_SYM
EXPR_STMT ::= ASG_STMT SEMICOLON_SYM
::= FUNCTION SEMICOLON_SYM
::= INTRINSICS SEMICOLON_SYM
::= EVAL SEMICOLON_SYM
PAUSE_STMT ::= PAUSE_SYM SEMICOLON_SYM
BP_CLAUSE ::= BP_SYM SEMICOLON_SYM
BREAK_STMT ::= BREAK_SYM SEMICOLON_SYM
CONTINUE_STMT ::= CONTINUE_SYM SEMICOLON_SYM
RETURN_CLAUSE ::= RETURN_SYM SEMICOLON_SYM
::= RETURN_SYM IF_EXPR SEMICOLON_SYM
TTS_STMT ::= TTSABORT_SYM SEMICOLON_SYM
::= TTSBEGIN_SYM SEMICOLON_SYM
::= TTSEND_SYM SEMICOLON_SYM
FLUSH_STMT ::= FLUSH ID_LIST SEMICOLON_SYM
FLUSH ::= FLUSH_SYM
TBLLOCK_STMT ::= TABLELOCK ID_LIST SEMICOLON_SYM
TABLELOCK ::= TABLELOCK_SYM
ID_LIST ::= STD_ID
::= ID_LIST LIST_SEP_SYM STD_ID
MOVE_REC_STMT ::= NEXT_SYM TABLE SEMICOLON_SYM
CHANGE_STMT ::= CHANGE_HEADER STATEMENT
CHANGE_HEADER ::= CHANGE LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM
CHANGE ::= CHANGECOMP_SYM
::= CHANGESITE_SYM
UNCHECKED_STMT ::= UNCHECKED_HEADER STATEMENT
UNCHECKED_HEADER ::= UNCHECKED_SYM LEFT_PAR_SYM IF_EXPR RGHT_PAR_SYM