การเรียงลำดับความหมายของภาษาการเขียนโปรแกรมคืออะไร?


9

ในบทที่ 1 ของมูลนิธิการปฏิบัติสำหรับการเขียนโปรแกรมภาษาที่ผู้เขียนกล่าวว่าไวยากรณ์นามธรรมต้นไม้ที่เกี่ยวข้องกับทุกประเภท

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

คำตอบ:


4

ขึ้นอยู่กับความหมายที่เราจะใช้สำหรับประเภทและประเภท - อย่างไรก็ตามสั้น - เล็ก ๆ น้อย ๆ ที่ไม่เป็นทางการ - คำจำกัดความอาจจะเป็น - ประเภทชั้นเรียนของ asts และประเภทชั้นเรียนของค่า


4

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

คำศัพท์ที่มาจากการจีบราคำ (ที่เรียกว่าจีบราส์ฟรี ) และพีชคณิตสากล เหล่านี้เป็นทฤษฎีเกี่ยวกับวากยสัมพันธ์ของโครงสร้างเชิงพีชคณิตวิเคราะห์โดยอิสระจากการตีความใด ๆ พวกเขาได้รับการพัฒนาในช่วงครึ่งแรกของศตวรรษที่ 20

คำอาจถูกมองว่าเป็นต้นไม้ที่โหนดจะมีข้อความจากชุด จำกัด ของผู้ประกอบการผู้ประกอบการแต่ละคนมี arity คงที่ที่ระบุจำนวนของลูกสาวในต้นไม้ Arity 0 ใช้สำหรับใบไม้ ในalgebras แบบเรียงหลายอันนี้ถูกขัดเกลาด้วยการเรียงลำดับดังนั้นตัวดำเนินการแต่ละตัวจะอยู่ในประเภทและ arities จะถูกแทนที่ด้วยรายการเรียงลำดับที่เรียงลำดับ การเรียงลำดับของโอเปอเรเตอร์พร้อมกับรายการประเภทของลูกสาวเรียกว่าลายเซ็นของโอเปอเรเตอร์

ในพีชคณิตสากลนี่คือการกลั่นเพิ่มเติมโดยการแนะนำความสัมพันธ์ที่เท่าเทียมกันที่กำหนดไว้อย่างเท่าเทียมกันระหว่างข้อตกลง

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

Universal algebras เกี่ยวข้องกับการพัฒนาทฤษฎีหมวดหมู่ซึ่งเป็นรากฐานในการมองเห็นในปัจจุบันของประเภทและภาษาการเขียนโปรแกรม

Algebras เป็นวัตถุประโยคและมีวัตถุประสงค์เพื่อใช้กับการตีความในโดเมนความหมายบางประเภทที่สอดคล้องกับประเภท การตีความคือโฮโมมอร์ฟิซึมที่แมปประเภทของโดเมนค่า (ประเภท)และตัวดำเนินการเข้าสู่การทำงานระหว่างโดเมนเหล่านั้นเพื่อให้มีการเคารพลายเซ็นและสมการในกรณีของพีชคณิตเชิงเส้น นี่คือวิธีที่คุณสามารถใช้ผลลัพธ์ของทฤษฎีกลุ่มกับโดเมนใด ๆ ที่มีการดำเนินการที่เคารพข้อกำหนดของกลุ่ม

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

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

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

ไม่เพียง แต่จะสะดวกในการศึกษาความหมายของภาษา แต่ต้นไม้มีโครงสร้างที่ดีกว่าสตริงดังนั้นจึงเป็นพื้นฐานที่ดีกว่าสำหรับการพัฒนาเครื่องมือการเขียนโปรแกรมและสภาพแวดล้อมการเขียนโปรแกรม

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

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

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

สะดวกสำหรับการเขียน (กึ่ง) เครื่องมือจัดการโปรแกรมอัตโนมัติเช่นการแปลงโปรแกรมอัตโนมัติหรือการแปลระหว่างภาษา

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

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

แต่ไวยากรณ์ที่เป็นนามธรรมมาก่อนระบบเหล่านี้ ภาษา Lisp (1958) มีรูปแบบนามธรรมซึ่งไม่น่าแปลกใจเพราะถูกพัฒนาขึ้นโดยนักตรรกวิทยาและเพื่อจุดประสงค์ในการสร้างโปรแกรมที่จัดการโปรแกรม (ดู ML และ LCF ... ที่มาภายหลัง) แต่เสียงกระเพื่อมไม่ได้ถูกจัดเรียง: ทุกอย่างเป็นรายการไวยากรณ์และโครงสร้างที่ละเอียดกว่านั้นขึ้นอยู่กับความหมาย สิ่งนี้ทำให้บางคนต้องพิจารณาอย่างไม่ถูกต้องว่า Lisp ไม่มีไวยากรณ์


คุณจะบอกว่ามี 2 ลำดับชั้นที่แตกต่างกันหนึ่งในที่ดินไวยากรณ์และอื่น ๆ ในดินความหมาย ในไวยากรณ์เรามีตามที่คุณ ASTs และทุกประเภทและประเภทแปลก ๆ ในความหมายเรามีค่าประเภทชนิด ... ฯลฯ ไม่มีภาษาใดที่รวมทั้งสองอย่างไว้ในสภาพแวดล้อมการพัฒนาเดียวอย่าง Twelf หรือ Coq?
CMCDragonkai

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

2

ปรากฏในบทที่สี่ที่มีไว้สำหรับไวยากรณ์และประเภทที่มีความหมาย

แผนภูมิไวยากรณ์ตัวอย่างในหน้า 40 เกี่ยวข้องกับการเรียงลำดับในภาษา L {num str} เห็นได้ชัดว่าการเรียงลำดับเป็นหมวดหมู่ในไวยากรณ์ของภาษา

โดยเฉพาะ "บวก" มีการเรียงลำดับซึ่งเป็นหมวดหมู่ประโยคของผลลัพธ์ การเรียงลำดับของโอเปอเรเตอร์ "บวก" มีชื่อว่า "Exp" นั่นแสดงให้เห็นถึงความจริงที่ว่า syntactically การอุทธรณ์ของผู้ประกอบการ "บวก" คือการแสดงออก การภาวนาของโอเปอเรเตอร์ "บวก" สามารถเติมตำแหน่งในทรีไวยากรณ์ที่เป็นนามธรรมซึ่งอนุญาตให้แสดงออก นั่นคือสิ่งที่ชนิดของการก่อสร้าง "บวก" คือ นั่นเป็นวิธีที่มันเหมาะกับโครงสร้างของข้อความที่แสดงถึงโปรแกรม

ระบบประเภทในหน้า 41 เกี่ยวกับประเภทภาษา L {num str} ชนิดของโอเปอเรเตอร์ "บวก" เนื่องจากตัวถูกดำเนินการมีประเภท "num" คือ "num" การตัดสินนี้เป็นคำอธิบายบางส่วนของซีแมนติกส์ของโอเปอเรเตอร์ "plus" นั่นคือส่วนหนึ่งของความหมายของโอเปอเรเตอร์ "บวก" คือการรวมกันของตัวเลขสองตัวเพื่อสร้างตัวเลข ความหมายนี้แตกต่าง "บวก" จากการแสดงออกอื่น ๆ

นอกจากนี้ยังมีการเรียงลำดับชื่อ "Typ" ที่มีสองประเภทคือ "num" และ "str"


1
เขาใช้มันในแนวคิดนี้ แต่เขาไม่ได้นิยามอย่างชัดเจน ฉันพบคำว่า "ตรรกะที่มีหลายเรียง" ซึ่งดูเหมือนว่าสำหรับฉันแล้วประเภทและประเภทนั้นปิดแนวคิดที่เกี่ยวข้องจริงๆ ฉันแค่อยากจะรู้คำจำกัดความที่ชัดเจนสำหรับทั้งสอง
rslima

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

แล้วหัวการผลิตใน parser ล่ะ มีหลายครั้งที่คุณจะจำแนกประเภทไวยากรณ์ภายใต้ชื่อที่คล้ายกันเช่น Expression หรือ Type
CMCDragonkai

1

ในตอนต้นของบทที่ 1 ฮาร์เปอร์ให้คำใบ้ว่าเขาหมายถึงอะไรโดยเรียงลำดับคำว่า:

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

เขากำหนดวลีคำว่าเป็นต้นไม้ไวยากรณ์นามธรรมซึ่งเขากล่าวถึง


ฉันดูเหมือนว่า "แปลก ๆ " ถูกนำมาใช้กับความหมายภาษาอังกฤษตามปกติของที่นี่ตรงกันกับ "ชนิด"
กราฟิลส์

@ ราฟาเอลใช่ แต่ดูเหมือนว่าความหมายนั้นสอดคล้องกับการใช้งานอย่างเป็นทางการในภายหลังคุณไม่เห็นด้วยใช่ไหม
jcora

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

@ ราฟาเอลโอเคโปรดอธิบายว่าการใช้งานเฉพาะนี้ไม่สอดคล้องกันอย่างแน่นอนซึ่งจะแจ้งให้ฉันทราบอย่างแน่นอนเพราะนั่นเป็นวิธีที่ฉันเข้าใจในปัจจุบัน
jcora

แนวคิดของ "การเรียงลำดับ" ฉันรู้ว่าเกี่ยวข้องกับแต่ละโหนดของ AST ไม่ใช่ต้นไม้ทั้งหมด (ซึ่งเป็นสิ่งที่คุณพูดว่า "วลี" หมายถึงในแหล่งที่มาของคุณ)
Raphael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.