ไวยากรณ์ของภาษาการทำโปรแกรม (2) (Syntax of programming languages)
Extended BNF เริ่มมีการปรับปรุงรูปแบบ BNF ให้สามารถเขียนได้ง่ายขึ้น เรียกว่ารูปแบบ EBNF (Extended BNF) หรือ EBNF ประเด็นสำคัญของการปรับปรุงคือ ……………………………โดยใช้ สัญลักษณ์เพิ่มเข้ามาดังนี้
Extended BNF …………………………….…….อยู่ภายในเครื่องหมาย [ ] หมายถึง ลำดับของสัญลักษณ์ซึ่งเป็นทางเลือก ซึ่งอาจจะเขียนหรือไม่ก็ได้ <if-STMT> → if ‘(’ <expr> ‘)’ <stmt> [ else <stmt>] ……………………………….. อยู่ภายในเครื่องหมาย ( ) และเขียน แยกกันโดยใช้ | หมายถึง ใช้บ่งบอกตัวเลือกที่เป็นไปได้ทั้งหมด ซึ่งจะต้องเลือกว่าเป็นตัวใด ตัวหนึ่งที่อยู่ภายในเครื่องหมาย ( ) เท่านั้น <term> → <term> ( + | - ) <constant>
Extended BNF ………………………. อยู่ภายในเครื่องหมาย { } หมายถึงสิ่งที่อยู่ในวงเล็บเกิดขึ้นซ้ำๆ กันได้หลายๆ ครั้ง สำหรับกฎที่มีการเรียกตัวเองซ้ำ สามารถใช้ { } เพื่อทำให้การเรียก ตัวเองซ้ำหมดไป <identifier> → <letter> { <letter> | <digit> }* สามารถเพิ่มเติมสัญลักษณ์บอกการเกิดซ้ำ {…}* หมายถึง สิ่งที่อยู่ในวงเล็บเกิดขึ้นซ้ำๆ กันได้ ……………………………. {…}+ หมายถึง สิ่งที่อยู่ในวงเล็บเกิดขึ้นซ้ำๆ กันได้ …………………………….
ตัวอย่าง BNF BNF <expr> <expr> + <term> <term> <term> * <factor> | <term> / <factor> | <factor> นิพจน์คือ เทอมเดี่ยวๆ เพียงเทอมเดียว (เช่น Y, 345) หรือ เป็นเทอมที่ซับซ้อนขึ้นโดยนำ หลายๆ เทอมมา บวก ลบ คูณ หาร กันได้ (เช่น Y + 345 / 2 * Z) เทอม คือ แฟคเตอร์หนึ่งแฟคเตอร์ หรือ หลายแฟคเตอร์มาคูณ หรือหารกัน
ตัวอย่าง BNF แปลงไปเป็น EBNF
จงแปลงไวยากรณ์ BNF นี้ให้กลายเป็น EBNF <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 นี้ให้กลายเป็น EBNF
Syntax Chart (Diagram) แผนภูมิไวยากรณ์ ใช้ในการอธิบายไวยากรณ์ของภาษาคอมพิวเตอร์ โดย เริ่มต้นใช้ในการอธิบายภาษา Pascal โดยใช้รูปภาพอธิบายโครงสร้างภาษา สัญลักษณ์นอนเทอร์มินอล จะถูกเขียนอยู่ใน…………………… สัญลักษณ์เทอร์มินอล จะถูกเขียนอยู่ใน……………………….
BNF : arithmetic expressions <expression > ::= <expression >+<term > | <expression >- <term > | <term > <term > ::= <term >* <factor > | <term >/ <factor > | <factor > <factor > ::= number | name | ‘(’ <expression > ‘)’
Syntax Chart : arithmetic expressions
Context-Free Grammars Developed by Noam Chomsky in the mid-1950s Language generators, meant to describe the syntax of natural languages
Context Free Grammar ให้ ………………………………หรือ Context-Free-Grammar ประกอบด้วย 4 เซตจำกัด คือ V คือ ..................................................................................... T คือ ..................................................................................... P คือ ..................................................................................... S คือ .....................................................................................
Context Free Grammar LET G(V,T,S,P) V = T = S = P = <comp> ::= <expr>=<expr> <expr> ::= <num>|<num><op><num> <num> ::= <digit>|<num><digit> <digit> ::= 1|2|3|4|5|6|7|8|9 <op> ::= +|-
Context Free Grammar พิจารณา ประโยค 1 – 5 ว่าเป็นสมาชิกของ Grammar หรือไม่ Q1: Is 1 Î L(G)? Q2: Is 1+1 Î L(G)? Q3: Is 1+1=3 Î L(G)? Q4: Is 1-2=-1 Î L(G)? Q5: Is 10-2-3=5 Î L(G)?