ส่วนประกอบพื้นฐานของไวยากรณ์ภาษา

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