งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)"— ใบสำเนางานนำเสนอ:

1 ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)

2 ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา
เซตของอักขระ (Character set) กำหนดเซตของอักขระที่สามารถใช้ตั้งชื่อต่างๆ อักขระพื้นฐาน ASCII ตัวระบุ (Identifier) หลักการตั้งชื่อชื่อตัวแปร, ชื่อฟังก์ชัน, ค่าคงที่ การใช้ตัวอักษร ตัวเลข underscore ในการตั้งชื่อ สัญลักษณ์ตัวดำเนินการ (Operator symbols) ตัวดำเนินการทางคณิตศาสตร์ ตรรกะ การเปรียบเทียบ ตัวดำเนินการกับ ข้อความ ลำดับความสำคัญในการประมวลผล

3 ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา
คำหลัก และคำสงวน (Keywords and reserved words) คำหลัก เป็นตัวระบุที่กำหนดความหมายไว้เป็นการเฉพาะในภาษานั้นๆ เช่น ………………………………………………………… คำสงวน คือ………………………………………………... ตัวอย่างภาษา Fortran REAL INTEGER INTEGER REAL REAL APPLE REAL = 3 คำใดเป็น keyword และ reserved word?

4 ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา
หมายเหตุ (Comments) อักขระคั่น และสัญลักษณ์จัดกลุ่ม (Delimiters and brackets) กำหนดอักขระพิเศษเพื่อบอกจุดจบ หรือจุดเริ่มต้นข้อความ เช่น .... นิพจน์ (Expression) ส่วนประกอบของข้อความสั่งที่สามารถถูกประมวลผล แล้วส่งผลให้โปรแกรม เปลี่ยนสถานะไปได้ เช่น … ข้อความสั่ง (Statements) ใช้ควบคุมลำดับการทำงานของโปรแกรม เช่น ข้อความสั่งกำหนดค่า, ข้อความสั่ง แบบมีเงื่อนไข, ข้อความสั่งแบบวนรอบ, ข้อความเรียกใช้โปรแกรมย่อย

5 รูปแบบทางการในการกำหนดไวยากรณ์ของภาษา (Formal methods to syntax definition)
ในการอธิบายโครงสร้างของภาษาเราใช้ภาษาที่เรียกว่า …………………………………… ………………………………………..ซึ่งมีความหมายว่าเป็นภาษาที่ใช้อธิบายอีกภาษาหนึ่ง ในการอธิบายภาษาคอมพิวเตอร์นิยมใช้รูปแบบเหล่านี้เป็นภาษาเมตา BNF (Backus-Naur Form) EBNF (Extended Backus-Naur Form) Syntax chart Context Free Grammar

6 Backus-Naur Form (BNF)
Invented by John Backus and Peter Naur to describe Algol 58 พัฒนามาจากทฤษฎีภาษาฟอร์มอล ซึ่งเสนอ แนวทางไว้โดย Noam Chomsky BNF is equivalent to context-free grammars

7 BNF Grammar ประกอบด้วย 4 ส่วน คือ < T, N, S, P >

8 BNF Grammar การเขียนโพรดักชัน จะใช้รูปแบบ A  
เมื่อ  เป็นสัญลักษณ์จากเซตของ ……………………………… เช่น การเขียนโพรดักชันอธิบายเลขฐานสอง BinaryDigit  Digit BinaryDigit  Digit BinaryDigit Digit  0 Digit  1 หรือสามารถเขียนรวมกันได้ คือ

9 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

10 BNF Grammar ตัวอย่าง จงเขียนโพรดักชันที่ใช้อธิบายเลขจำนวนเต็ม (Integer) ตัวอย่าง จงเขียนโพรดักชันที่ใช้อธิบายเลขจำนวนจริง(ทศนิยม) (real) ตัวอย่าง จงเขียนโพรดักชันที่ใช้อธิบายตัวแปรหรือตัวระบุ (identifier)

11 การแปลง (Derivation) ในการพิจารณาว่า………………………………………………………………. ………………………………………..ทำได้โดยใช้วิธีแปลง หรือ……….……. โดยเริ่มทำการแปลงจากโพรดักชันเริ่มต้น (start symbol) แล้วแทนที่นอน เทอร์มินอล ด้วยโพรดักชันต่างๆ ไปเรื่อยๆ จนกระทั่งได้รูปแบบที่เป็น สัญลักษณ์เทอร์มินอลทั้งหมด จึงจะถือว่าสตริงนั้นเขียนได้ถูกต้องตาม ไวยากรณ์ของภาษา ใช้สัญลักษณ์ ……………… ในการกระจายแต่ละลำดับขั้น มีรูปแบบการแปลง 2 ประเภท คือ Leftmost derivation และRightmost derivation

12 ตัวอย่างการทำ Derivation #1
จงพิจารณาว่า เป็นทศนิยม (real) หรือไม่

13 ตัวอย่างการทำ Derivation #2
จาก BNF Grammars #1 ที่กำหนดให้ในสไลด์ก่อนหน้า จงตรวจสอบว่า a = 5 – a ; d = c + 2 ; เป็นสตริงที่เป็นสมาชิกของไวยากรณ์ดังกล่าวหรือไม่

14 Parse Tree ในการพิจารณาว่าสตริงหนึ่งๆ จัดอยู่ในกลุ่มไวยากรณ์ของภาษาหรือไม่ นอกจากจะทำได้ได้โดยใช้วิธีแปลง หรือ derive แล้ว ยังสามารถทำได้อีกวิธี หนึ่ง คือการสร้างพาสทรี (Parse tree) หรือบางครั้งเรียกเดริเวชันทรี (Derivation tree)

15 Parse Tree A hierarchical representation of a derivation
1. ……………………..ของต้นไม้จะเป็น Start symbol ของไวยากรณ์เสมอ 2. …………………………………………จะเท่ากับจำนวนชั้น (=>) ของการทำ derivation เสมอ 3. ……………………………………...ของต้นไม้จะต้องเป็น terminal symbol เสมอ <program> <stmts> <stmt> 3 a <var> = <expr> b <term> +

16 Parse Tree Example #1 จงเขียน Parse Tree ของตัวอย่างการทำ Derivation #1

17 ไวยากรณ์กำกวม (Ambiguous grammar)
เมื่อรูปแบบของไวยากรณ์กำหนดไว้ไม่ชัดเจนเพียงพอ ทำให้สามารถสร้าง พาสทรี หรือสามารถแปลงไวยากรณ์ไปได้หลายรูปแบบ ไวยากรณ์ที่ดีควรจะมีวิธีการแปลงที่เป็นไปได้เพียงรูปแบบเดียว ตัวอย่าง #3 จงพิจารณาไวยากรณ์ด้านล่างว่ามีความกำกวมหรือไม่ <expr>  <integer> | <expr> - <expr> <integer>  1 | 2 | 3 | 4 | 5

18 ไวยากรณ์กำกวม (Ambiguous grammar)
ตัวอย่าง #3 Hint : ยกตัวอย่างสตริงที่น่าจะทำให้เกิดความกำกวม แล้วเขียน Parse tree

19 การแก้ไขไวยากรณ์ไม่ให้เกิดความกำกวม
compiler เข้าใจความหมายที่ถูกต้องของประโยค เปลี่ยนแปลงไวยากรณ์ให้แปลงได้เพียงด้านเดียว จากตัวอย่าง #3 สามารถแก้ไขไวยากรณ์ได้ดังนี้ <expr>  …………………………………………………………………………… <integer>  1 | 2 | 3 | 4 | 5

20 กำหนด 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 ของ ……………………………


ดาวน์โหลด ppt ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages)

งานนำเสนอที่คล้ายกัน


Ads by Google