ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา
Download
Report
Transcript ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา
ไวยากรณ์ของภาษาการทาโปรแกรม (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)
ใช้ควบคุมลำดับกำรทำงำนของโปรแกรม
เช่น ข้อควำมสัง่ กำหนดค่ำ, ข้อควำมสัง่
แบบมีเงื่อนไข, ข้อควำมสัง่ แบบวนรอบ, ข้อควำมเรียกใช้โปรแกรมย่อย
รูปแบบทำงกำรในกำรกำหนดไวยำกรณ์ของภำษำ
(Formal methods to syntax definition)
5
ในกำรอธิบำยโครงสร้ำงของภำษำเรำใช้ภำษำที่เรียกว่ำ ……………………………………
………………………………………..ซึ่งมีควำมหมำยว่ำเป็ นภำษำที่ใช้อธิบำยอีกภำษำหนึ่ ง
ในกำรอธิบำยภำษำคอมพิวเตอร์นิยมใช้รปู แบบเหล่ำนี้ เป็ นภำษำเมตำ
BNF
(Backus-Naur Form)
EBNF (Extended Backus-Naur Form)
Syntax chart
Context Free Grammar
Backus-Naur Form (BNF)
6
Backus-Naur Form (1959)
Invented
by John Backus and Peter Naur to
describe Algol 58
พัฒนามาจากทฤษฎีภาษาฟอร์มอล ซึง่ เสนอ
แนวทางไว้โดย Noam Chomsky
BNF is equivalent to context-free grammars
BNF Grammar
7
ประกอบด้วย 4 ส่วน คือ < T, N, S, P >
T
คือ ……………………………………………………..
N คือ ……………………………………………………
S คือ สัญลักษณ์นอนเทอร์มน
ิ อลทีใ่ ช้เป็ น……………………………............
P คือ เซตของกฏทีเ่ รียกว่า ………………………………………...............
ใช้อธิบายส่วนประกอบเชิงไวยากรณ์ต่างๆ ของภาษา เช่น ชื่อตัวแปร,
จานวนเลข, นิพจน์, คาสังวนรอบ,
่
โปรแกรม
BNF Grammar
8
กำรเขียนโพรดักชัน จะใช้รปู แบบ
A
เมื่อ A เป็ นสัญลักษณ์ในเซตของ………………………………..
เมื่อ เป็ นสัญลักษณ์จำกเซตของ ………………………………
เช่น กำรเขียนโพรดักชันอธิบำยเลขฐำนสอง
BinaryDigit Digit
BinaryDigit Digit BinaryDigit
Digit 0
Digit 1
หรือสำมำรถเขียนรวมกันได้ คือ
An Example Grammar #1
9
<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
10
ตัวอย่าง จงเขียนโพรดักชันทีใ่ ช้อธิบายเลขจานวนเต็ม (Integer)
ตัวอย่าง จงเขียนโพรดักชันทีใ่ ช้อธิบายเลขจานวนจริง(ทศนิยม) (real)
ตัวอย่าง จงเขียนโพรดักชันทีใ่ ช้อธิบายตัวแปรหรือตัวระบุ (identifier)
กำรแปลง (Derivation)
11
ในการพิจารณาว่า……………………………………………………………….
………………………………………..ทาได้โดยใช้วธิ แี ปลง หรือ……….…….
โดยเริม่ ทาการแปลงจากโพรดักชันเริม่ ต้น (start symbol) แล้วแทนทีน่ อน
เทอร์มนิ อล ด้วยโพรดักชันต่างๆ ไปเรือ่ ยๆ จนกระทังได้
่ รปู แบบทีเ่ ป็ น
สัญลักษณ์เทอร์มนิ อลทัง้ หมด จึงจะถือว่าสตริงนัน้ เขียนได้ถูกต้องตาม
ไวยากรณ์ของภาษา
ใช้สญ
ั ลักษณ์ ……………… ในการกระจายแต่ละลาดับขัน้
มีรปู แบบการแปลง 2 ประเภท คือ Leftmost derivation และRightmost
derivation
ตัวอย่ำงกำรทำ Derivation #1
12
จงพิจารณาว่า 673.5 เป็ นทศนิยม (real) หรือไม่
ตัวอย่ำงกำรทำ Derivation #2
13
จาก BNF Grammars #1 ทีก่ าหนดให้ในสไลด์ก่อนหน้า จงตรวจสอบว่า
a=5–a;d=c+2;
เป็ นสตริงทีเ่ ป็ นสมาชิกของไวยากรณ์ดงั กล่าวหรือไม่
Parse Tree
14
ในการพิจารณาว่าสตริงหนึ่งๆ จัดอยูใ่ นกลุ่มไวยากรณ์ของภาษาหรือไม่
นอกจากจะทาได้ได้โดยใช้วธิ แี ปลง หรือ derive แล้ว ยังสามารถทาได้อกี วิธี
หนึ่ง คือการสร้างพาสทรี (Parse tree) หรือบางครัง้ เรียกเดริเวชันทรี
(Derivation tree)
Parse Tree
15
A hierarchical representation of a derivation
<program>
<stmts>
<stmt>
<var>
=
<expr>
a <term> +
<term>
<var>
3
b
คุณสมบัตขิ อง Parse Tree
1. ……………………..ของต้นไม้จะเป็ น Start symbol ของ
ไวยากรณ์เสมอ
2. …………………………………………จะเท่ากับจานวน
ชัน้ (=>) ของการทา derivation เสมอ
3. ……………………………………...ของต้นไม้จะต้องเป็ น
terminal symbol เสมอ
Parse Tree Example #1
16
จงเขียน Parse Tree ของตัวอย่างการทา Derivation #1
ไวยำกรณ์กำกวม (Ambiguous grammar)
17
เมื่อรูปแบบของไวยำกรณ์กำหนดไว้ไม่ชดั เจนเพียงพอ ทำให้สำมำรถสร้ำง
พำสทรี หรือสำมำรถแปลงไวยำกรณ์ไปได้หลำยรูปแบบ
ไวยำกรณ์ที่ดีควรจะมีวธิ ีกำรแปลงที่เป็ นไปได้เพียงรูปแบบเดียว
ตัวอย่ำง #3 จงพิจำรณำไวยำกรณ์ดำ้ นล่ำงว่ำมีควำมกำกวมหรือไม่
<expr>
<integer> | <expr> - <expr>
<integer> 1 | 2 | 3 | 4 | 5
ไวยำกรณ์กำกวม (Ambiguous grammar)
18
ตัวอย่าง #3
Hint : ยกตัวอย่างสตริงทีน่ ่าจะทาให้เกิดความกากวม แล้วเขียน Parse tree
กำรแก้ไขไวยำกรณ์ไม่ให้เกิดควำมกำกวม
19
compiler เข้าใจความหมายที่ถูกต้องของประโยค
เปลี่ยนแปลงไวยากรณ์ให้แปลงได้เพียงด้านเดียว
จำกตัวอย่ำง #3 สำมำรถแก้ไขไวยำกรณ์ได้ดงั นี้
<expr>
……………………………………………………………………………
<integer> 1 | 2 | 3 | 4 | 5
กำหนด Grammar ในรูปของ BNF ดังนี้
20
<expr>
<expr> + <term> |
<expr> - <term> |
<term>
<term>
<term> * <factor> |
<term> / <factor> |
<factor>
<factor>
<var>
<num>
<var> | <num> | ( <expr> )
a | b | c | ... | x | y | z
0|1|2|3|4|5|6|7|8|9
ให้เขียนลำด ับกำรแปลงและ Parse Tree ของ ……………………………