1 / 20

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

ไวยากรณ์ของภาษาการทำโปรแกรม (1) (Syntax of programming languages). ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา. เซตของอักขระ (Character set) กำหนดเซตของอักขระที่สามารถใช้ตั้งชื่อต่างๆ อักขระพื้นฐาน ASCII ตัวระบุ (Identifier) หลักการตั้งชื่อชื่อตัวแปร, ชื่อฟังก์ชัน, ค่าคงที่

dannon
Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. ส่วนประกอบพื้นฐานของไวยากรณ์ภาษาส่วนประกอบพื้นฐานของไวยากรณ์ภาษา • คำหลัก และคำสงวน (Keywords and reserved words) • คำหลัก เป็นตัวระบุที่กำหนดความหมายไว้เป็นการเฉพาะในภาษานั้นๆ เช่น ………………………………………………………… • คำสงวน คือ………………………………………………... • ตัวอย่างภาษา Fortran REAL INTEGERINTEGER 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) • Backus-Naur Form (1959) • Invented by John BackusandPeter Naurto describe Algol 58 • พัฒนามาจากทฤษฎีภาษาฟอร์มอล ซึ่งเสนอแนวทางไว้โดย Noam Chomsky • BNF is equivalent to context-free grammars

  7. BNF Grammar • ประกอบด้วย 4 ส่วน คือ < T, N, S, P > • T คือ …………………………………………………….. • N คือ …………………………………………………… • S คือ สัญลักษณ์นอนเทอร์มินอลที่ใช้เป็น……………………………............ • P คือ เซตของกฏที่เรียกว่า ………………………………………...............ใช้อธิบายส่วนประกอบเชิงไวยากรณ์ต่างๆ ของภาษา เช่น ชื่อตัวแปร, จำนวนเลข, นิพจน์, คำสั่งวนรอบ, โปรแกรม

  8. BNF Grammar • การเขียนโพรดักชัน จะใช้รูปแบบ A  • เมื่อ 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 • จงพิจารณาว่า673.5 เป็นทศนิยม (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 คุณสมบัติของ Parse Tree 1. ……………………..ของต้นไม้จะเป็น Start symbol ของไวยากรณ์เสมอ 2. …………………………………………จะเท่ากับจำนวนชั้น (=>) ของการทำ derivation เสมอ 3. ……………………………………...ของต้นไม้จะต้องเป็น terminal symbol เสมอ <program> <stmts> <stmt> <var> = <expr> a <term> + <term> <var> 3 b

  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 ของ……………………………

More Related