มีความสัมพันธ์บางอย่างระหว่างไวยากรณ์และความหมายที่แต่ละองค์ประกอบความหมายจะเชื่อมโยงกับการแปลอย่างน้อยหนึ่ง syntactic และอีกคนหนึ่งมั่นใจว่าการเป็นตัวแทนของวากยสัมพันธ์แต่ละคนมีความหมายที่โดดเด่น
แผนภูมิเปรียบเทียบ
พื้นฐานสำหรับการเปรียบเทียบ | วากยสัมพันธ์ | อรรถศาสตร์ |
---|---|---|
ขั้นพื้นฐาน | วลีที่อนุญาตของภาษา | การตีความวลี |
ข้อผิดพลาด | จัดการในเวลารวบรวม | เผชิญหน้ากับรันไทม์ |
ความสัมพันธ์ | การตีความทางไวยากรณ์ต้องมีความหมายที่แตกต่าง | องค์ประกอบความหมายเกี่ยวข้องกับการเป็นตัวแทนทางวากยสัมพันธ์ |
นิยามของไวยากรณ์
ไวยากรณ์ ของภาษาโปรแกรมใช้เพื่อแสดงถึงโครงสร้างของโปรแกรมโดยไม่คำนึงถึงความหมาย มันเป็นพื้นเน้นโครงสร้างเค้าโครงของโปรแกรมที่มีลักษณะของพวกเขา มันเกี่ยวข้องกับการรวบรวมกฎที่ตรวจสอบลำดับของสัญลักษณ์และคำสั่งที่ใช้ในโปรแกรม แบบจำลองในทางปฏิบัติและการคำนวณแสดงให้เห็นถึงองค์ประกอบทางวากยสัมพันธ์เหล่านี้ของภาษาโปรแกรม เครื่องมือที่พัฒนาขึ้นสำหรับสเปคของไวยากรณ์ของภาษาการเขียนโปรแกรมเป็นแบบปกติที่ไม่มีบริบทและไวยากรณ์ของแอตทริบิวต์
อย่างไรก็ตามการใช้ไวยากรณ์ในด้านนี้คืออะไร? Grammars โดยทั่วไปคือกฎการเขียนใหม่ซึ่งมีวัตถุประสงค์เพื่อจดจำและสร้างโปรแกรม ไวยากรณ์ไม่พึ่งพารูปแบบการคำนวณแทนใช้ในคำอธิบายของโครงสร้างของภาษา ไวยากรณ์มีชุดหมวดหมู่ทางไวยากรณ์ที่ จำกัด (เช่นวลีคำนามวลีคำกริยาบทความคำนาม ฯลฯ ) คำเดี่ยว (องค์ประกอบของตัวอักษร) และกฎที่มีรูปแบบที่ดีเพื่อระบุลำดับภายในส่วนประกอบของหมวดหมู่ไวยากรณ์ ควรปรากฏขึ้น
การวิเคราะห์ไวยากรณ์ เป็นงานที่ดำเนินการโดยคอมไพเลอร์ซึ่งตรวจสอบว่าโปรแกรมนั้นมีต้นไม้ที่ได้รับการเชื่อมโยงที่เหมาะสมหรือไม่
ไวยากรณ์ของภาษาการเขียนโปรแกรมสามารถตีความได้โดยใช้เทคนิคที่เป็นทางการและไม่เป็นทางการดังต่อไปนี้:
- ไวยากรณ์คำศัพท์ สำหรับการกำหนดกฎสำหรับสัญลักษณ์พื้นฐานที่เกี่ยวข้องกับตัวระบุตัวอักษรตัวคั่นและตัวดำเนินการ
- ไวยากรณ์ที่เป็นรูปธรรม ระบุการแสดงที่แท้จริงของโปรแกรมด้วยความช่วยเหลือของสัญลักษณ์ศัพท์เช่นตัวอักษร
- ไวยากรณ์บทคัดย่อ บ่งบอกถึงข้อมูลโปรแกรมที่สำคัญเท่านั้น
ประเภทของไวยากรณ์
- มีการใช้ไวยากรณ์ที่ไม่มีบริบทให้ แพร่หลายเพื่อคิดโครงสร้างภาษาทั้งหมด
- นิพจน์ทั่วไป อธิบายหน่วยศัพท์ (โทเค็น) ของภาษาโปรแกรม
- แอตทริบิวต์ของไวยากรณ์ ระบุส่วนตามบริบทของภาษา
ความหมายของความหมาย
ศัพท์ ความหมาย ในภาษาโปรแกรมใช้เพื่อหาความสัมพันธ์ระหว่างไวยากรณ์และรูปแบบการคำนวณ มันเน้นการตีความของโปรแกรมเพื่อให้โปรแกรมเมอร์สามารถเข้าใจได้ในวิธีที่ง่ายหรือทำนายผลลัพธ์ของการดำเนินการโปรแกรม วิธีการที่เรียกว่า ซีแมนทิกส์ที่มุ่งเน้น ทาง ไวยากรณ์ นั้นใช้ในการแมปโครงสร้างทางไวยากรณ์กับโมเดลการคำนวณด้วยความช่วยเหลือของฟังก์ชัน
ความหมายของภาษาการเขียนโปรแกรมสามารถอธิบายได้ด้วยเทคนิคต่าง ๆ - ความหมายเชิงพีชคณิต, ความหมายเชิงแอกเซียล, ความหมายเชิงปฏิบัติการ, ความหมายเชิงปฏิบัติการและความหมายเชิงการแปล
- ความหมายเชิงพีชคณิต ตีความโปรแกรมโดยการนิยามพีชคณิต
- สัจพจน์เชิงสัจพจน์ (Axiomatic Semantics) กำหนดความหมายของโปรแกรมโดยสร้างการยืนยันเกี่ยวกับการเชื่อมโยงที่แต่ละจุดในการดำเนินการของโปรแกรม (เช่นโดยนัย)
- อรรถศาสตร์เชิงปฏิบัติการ เปรียบเทียบภาษากับเครื่องนามธรรมและจากนั้นโปรแกรมจะถูกประเมินเป็นลำดับการเปลี่ยนสถานะ
- ความหมายเชิง Denotational เป็นการแสดงออกถึงความหมายของโปรแกรมในรูปแบบของชุดของฟังก์ชันที่ทำงานกับสถานะของโปรแกรม
- ความหมายของการแปล มุ่งเน้นไปที่วิธีการที่ใช้สำหรับการแปลโปรแกรมเป็นภาษาอื่น
ความแตกต่างที่สำคัญระหว่างไวยากรณ์และความหมาย
- ไวยากรณ์หมายถึงโครงสร้างของโปรแกรมที่เขียนด้วยภาษาการเขียนโปรแกรม ในทางกลับกันความหมายอธิบายความสัมพันธ์ระหว่างความรู้สึกของโปรแกรมและรูปแบบการคำนวณ
- ข้อผิดพลาดทางไวยากรณ์ได้รับการจัดการในเวลารวบรวม ข้อผิดพลาดทางความหมายยากต่อการค้นหาและพบที่รันไทม์
- ตัวอย่างเช่นใน c ++ ตัวแปร“ s” ถูกประกาศเป็น“ int s;” เพื่อเริ่มต้นเราต้องใช้ค่าจำนวนเต็ม แทนที่จะใช้จำนวนเต็มเราได้เริ่มต้นด้วย "เจ็ด" การประกาศและการกำหนดค่าเริ่มต้นนี้ถูกต้องตามหลักไวยากรณ์ แต่ไม่ถูกต้องเชิงความหมายเพราะ“ เจ็ด” ไม่ได้เป็นตัวแทนของรูปแบบจำนวนเต็ม
ข้อสรุป
ไวยากรณ์ของภาษาโปรแกรมคือชุดของกฎเพื่อระบุโครงสร้างหรือรูปแบบของรหัสในขณะที่ความหมายหมายถึงการตีความของรหัสหรือความหมายที่เกี่ยวข้องของสัญลักษณ์อักขระหรือส่วนหนึ่งส่วนใดของโปรแกรม