220 likes | 711 Views
ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages). ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา. เซตของอักขระ (Character set) กำหนดเซตของอักขระที่สามารถใช้ตั้งชื่อต่างๆ อักขระพื้นฐาน ASCII ตัวระบุ (Identifier) หลักการตั้งชื่อชื่อตัวแปร, ชื่อฟังก์ชัน, ค่าคงที่
E N D
ไวยากรณ์ของภาษาการทำโปรแกรม (1)(Syntax of programming languages)
ส่วนประกอบพื้นฐานของไวยากรณ์ภาษาส่วนประกอบพื้นฐานของไวยากรณ์ภาษา • เซตของอักขระ (Character set) • กำหนดเซตของอักขระที่สามารถใช้ตั้งชื่อต่างๆ • อักขระพื้นฐาน ASCII • ตัวระบุ (Identifier) • หลักการตั้งชื่อชื่อตัวแปร, ชื่อฟังก์ชัน, ค่าคงที่ • การใช้ตัวอักษร ตัวเลข underscore ในการตั้งชื่อ • สัญลักษณ์ตัวดำเนินการ (Operator symbols) • ตัวดำเนินการทางคณิตศาสตร์ ตรรกะ การเปรียบเทียบ ตัวดำเนินการกับข้อความ • ลำดับความสำคัญในการประมวลผล
ส่วนประกอบพื้นฐานของไวยากรณ์ภาษาส่วนประกอบพื้นฐานของไวยากรณ์ภาษา • คำหลัก และคำสงวน (Keywords and reserved words) • คำหลัก เป็นตัวระบุที่กำหนดความหมายไว้เป็นการเฉพาะในภาษานั้นๆ เช่น ………………………………………………………… • คำสงวน คือ………………………………………………... • ตัวอย่างภาษา Fortran REAL INTEGERINTEGER REAL REAL APPLE REAL = 3 คำใดเป็น keyword และ reserved word?
ส่วนประกอบพื้นฐานของไวยากรณ์ภาษาส่วนประกอบพื้นฐานของไวยากรณ์ภาษา • หมายเหตุ (Comments) • อักขระคั่น และสัญลักษณ์จัดกลุ่ม (Delimiters and brackets) • กำหนดอักขระพิเศษเพื่อบอกจุดจบ หรือจุดเริ่มต้นข้อความ • เช่น .... • นิพจน์ (Expression) • ส่วนประกอบของข้อความสั่งที่สามารถถูกประมวลผล แล้วส่งผลให้โปรแกรมเปลี่ยนสถานะไปได้ • เช่น … • ข้อความสั่ง (Statements) • ใช้ควบคุมลำดับการทำงานของโปรแกรม เช่น ข้อความสั่งกำหนดค่า, ข้อความสั่งแบบมีเงื่อนไข, ข้อความสั่งแบบวนรอบ, ข้อความเรียกใช้โปรแกรมย่อย
รูปแบบทางการในการกำหนดไวยากรณ์ของภาษา(Formal methods to syntax definition) • ในการอธิบายโครงสร้างของภาษาเราใช้ภาษาที่เรียกว่า ……………………………………………………………………………..ซึ่งมีความหมายว่าเป็นภาษาที่ใช้อธิบายอีกภาษาหนึ่ง • ในการอธิบายภาษาคอมพิวเตอร์นิยมใช้รูปแบบเหล่านี้เป็นภาษาเมตา • BNF (Backus-Naur Form) • EBNF (Extended Backus-Naur Form) • Syntax chart • Context Free Grammar
Backus-Naur Form (BNF) • Backus-Naur Form (1959) • Invented by John BackusandPeter Naurto describe Algol 58 • พัฒนามาจากทฤษฎีภาษาฟอร์มอล ซึ่งเสนอแนวทางไว้โดย Noam Chomsky • BNF is equivalent to context-free grammars
BNF Grammar • ประกอบด้วย 4 ส่วน คือ < T, N, S, P > • T คือ …………………………………………………….. • N คือ …………………………………………………… • S คือ สัญลักษณ์นอนเทอร์มินอลที่ใช้เป็น……………………………............ • P คือ เซตของกฏที่เรียกว่า ………………………………………...............ใช้อธิบายส่วนประกอบเชิงไวยากรณ์ต่างๆ ของภาษา เช่น ชื่อตัวแปร, จำนวนเลข, นิพจน์, คำสั่งวนรอบ, โปรแกรม
BNF Grammar • การเขียนโพรดักชัน จะใช้รูปแบบ A • เมื่อ A เป็นสัญลักษณ์ในเซตของ……………………………….. • เมื่อ เป็นสัญลักษณ์จากเซตของ ……………………………… • เช่น การเขียนโพรดักชันอธิบายเลขฐานสอง BinaryDigit Digit BinaryDigit Digit BinaryDigit Digit 0 Digit 1 หรือสามารถเขียนรวมกันได้ คือ
An Example Grammar #1 <program> <stmts> <stmts> <stmt> ; | <stmt> ; <stmts> <stmt> <var> = <expr> <var> a | b | c | d <expr> <term> + <term> | <term> - <term> <term> <var> | <const> <const> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
BNF Grammar • ตัวอย่าง จงเขียนโพรดักชันที่ใช้อธิบายเลขจำนวนเต็ม (Integer) • ตัวอย่าง จงเขียนโพรดักชันที่ใช้อธิบายเลขจำนวนจริง(ทศนิยม) (real) • ตัวอย่าง จงเขียนโพรดักชันที่ใช้อธิบายตัวแปรหรือตัวระบุ (identifier)
การแปลง (Derivation) • ในการพิจารณาว่า……………………………………………………………….………………………………………..ทำได้โดยใช้วิธีแปลง หรือ……….……. • โดยเริ่มทำการแปลงจากโพรดักชันเริ่มต้น (start symbol) แล้วแทนที่นอนเทอร์มินอล ด้วยโพรดักชันต่างๆ ไปเรื่อยๆ จนกระทั่งได้รูปแบบที่เป็นสัญลักษณ์เทอร์มินอลทั้งหมด จึงจะถือว่าสตริงนั้นเขียนได้ถูกต้องตามไวยากรณ์ของภาษา • ใช้สัญลักษณ์………………ในการกระจายแต่ละลำดับขั้น • มีรูปแบบการแปลง 2 ประเภท คือ Leftmost derivation และRightmost derivation
ตัวอย่างการทำ Derivation #1 • จงพิจารณาว่า673.5 เป็นทศนิยม (real)หรือไม่
ตัวอย่างการทำ Derivation #2 • จาก BNF Grammars#1 ที่กำหนดให้ในสไลด์ก่อนหน้า จงตรวจสอบว่า a = 5 – a ; d = c + 2 ; • เป็นสตริงที่เป็นสมาชิกของไวยากรณ์ดังกล่าวหรือไม่
Parse Tree • ในการพิจารณาว่าสตริงหนึ่งๆ จัดอยู่ในกลุ่มไวยากรณ์ของภาษาหรือไม่ นอกจากจะทำได้ได้โดยใช้วิธีแปลง หรือ derive แล้ว ยังสามารถทำได้อีกวิธีหนึ่ง คือการสร้างพาสทรี (Parse tree) หรือบางครั้งเรียกเดริเวชันทรี (Derivation tree)
Parse Tree • A hierarchical representation of a derivation คุณสมบัติของ Parse Tree 1. ……………………..ของต้นไม้จะเป็น Start symbol ของไวยากรณ์เสมอ 2. …………………………………………จะเท่ากับจำนวนชั้น (=>) ของการทำ derivation เสมอ 3. ……………………………………...ของต้นไม้จะต้องเป็น terminal symbol เสมอ <program> <stmts> <stmt> <var> = <expr> a <term> + <term> <var> 3 b
Parse Tree Example #1 • จงเขียน Parse Tree ของตัวอย่างการทำ Derivation #1
ไวยากรณ์กำกวม(Ambiguous grammar) • เมื่อรูปแบบของไวยากรณ์กำหนดไว้ไม่ชัดเจนเพียงพอ ทำให้สามารถสร้างพาสทรี หรือสามารถแปลงไวยากรณ์ไปได้หลายรูปแบบ • ไวยากรณ์ที่ดีควรจะมีวิธีการแปลงที่เป็นไปได้เพียงรูปแบบเดียว • ตัวอย่าง #3 จงพิจารณาไวยากรณ์ด้านล่างว่ามีความกำกวมหรือไม่ <expr> <integer> | <expr> - <expr> <integer> 1 | 2 | 3 | 4 | 5
ไวยากรณ์กำกวม (Ambiguous grammar) • ตัวอย่าง #3 Hint : ยกตัวอย่างสตริงที่น่าจะทำให้เกิดความกำกวม แล้วเขียน Parse tree
การแก้ไขไวยากรณ์ไม่ให้เกิดความกำกวมการแก้ไขไวยากรณ์ไม่ให้เกิดความกำกวม • compiler เข้าใจความหมายที่ถูกต้องของประโยค • เปลี่ยนแปลงไวยากรณ์ให้แปลงได้เพียงด้านเดียว • จากตัวอย่าง#3สามารถแก้ไขไวยากรณ์ได้ดังนี้ <expr> …………………………………………………………………………… <integer> 1 | 2 | 3 | 4 | 5
กำหนด Grammar ในรูปของ BNF ดังนี้ <expr> <expr> + <term> | <expr> - <term> | <term> <term> <term> * <factor> | <term> / <factor> | <factor> <factor> <var> | <num> | ( <expr> ) <var> a | b | c | ... | x | y | z <num> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 ให้เขียนลำดับการแปลงและ Parse Tree ของ……………………………