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

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

FIRST & FOLLOW Parsing Table

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


งานนำเสนอเรื่อง: "FIRST & FOLLOW Parsing Table"— ใบสำเนางานนำเสนอ:

1 FIRST & FOLLOW Parsing Table
Chainate, W.

2 E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id
หา FIRST (1) หาค่า ɛ ว่าเป็นสมาชิกใน FIRST ของสัญลักษณ์ไม่สิ้นสุดตัวใดได้บ้าง ɛ  FIRST(A) ɛ  FIRST(B) E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id

3 E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id
หา FIRST (2) E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id + * ( ) id E A T B F

4 E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id
หา FIRST E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id + * ( ) id E A T B F

5 E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id
หา FOLLOW E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id FOLLOW E A T B F

6 Parsing table E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id
เป็นตาราง 2 มิติ ขนาด m คูณ n m is non-terminal symbols n is terminal symbols + 1 ($) สำหรับแต่ละกฏ X   ให้ใส่กฏนี้ในช่อง [X, a] เมื่อ a  ɛ  FIRST() และ ถ้า ɛ  FIRST() ใส่กฏนี้ในตารางตรงช่อง [X, b] เมื่อ b  FOLLOW(X) Parsing table E  TA A  +TA | ɛ T  FB B  *FB | ɛ F  ( E ) | id

7 ไวยากรณ์ไม่พึ่งบริบท (context free grammar) ที่นำมาสร้างตารางวิเคราะห์การกระจาย (parsing table) ของตัววิเคราะห์กระจายทำนายไม่เรียกซ้ำ (nonrecursive predictive parser) แล้วในช่องมีมากกว่า 1 กฏ แสดงว่าตารางนั้นเกิดความขัดแย้ง และไวยากรณ์ดังกล่าวจะไม่เป็นไวยากรณ์ LL(1) รวมถึงไวยากรณ์กำกวมด้วย ลองทำ FIRST & FOLLOW และ parsing table จากไวยากรณ์นี้ดูซิ... S  iEtAB B  eA | ɛ E  b A  S | a ความขัดแย้ง !!

8 ไวยากรณ์ LL(1) CFG จะเป็นไวยากรณ์ LL(1) ก็ต่อเมื่อ
X  1 |  2 | … |  n แล้วจะได้ว่า FIRST( i)  FIRST( j) =  สำหรับ ij  i *  แล้ว FIRST( j)  FOLLOW(X) =  สำหรับ j  I ไวยากรณ์ต่อไปนี้เป็นไวยากรณ์ LL(1) หรือไม่ S  iEtSA | a A  eS |  E  b ไวยากรณ์ LL(1)

9 การเกิดซ้ำซ้าย (Left recursion)
Non-terminal symbols ใดๆ มีการเกิดซ้ำซ้าย ถ้า X + X ซึ่งเราสามารถตรวจสอบได้โดยใช้เมทริกซ์ที่ใช้หา FIRST CFG ที่มี NT อย่างน้อยหนึ่งตัวมีการเกิดซ้ำซ้าย จะไม่เป็นไวยากรณ์ LL(1) ในกรณีที่มีกฏ X  X เราจะกล่าวได้ว่ามีการเกิดซ้ำซ้ายทันที และสามารถขจัดการเกิดซ้ำซ้ายด้วยการเขียนกฏที่อยู่ในรูป X  X1|X2|…|Xm|1|2|…|n ให้กลายเป็น X  1Y|2Y|…|nY Y  1Y|2Y|…|mY เมื่อ Y เป็น NT ตัวใหม่ การเกิดซ้ำซ้าย (Left recursion)

10 การเกิดซ้ำซ้าย (Left recursion)
จงเปลี่ยนไวยากรณ์ต่อไปนี้ ให้ไม่มีการเกิดซ้ำซ้าย E  E+T | E-T | T T  T*F | T/F | F F  -F | +F | P P  (E) | id การเกิดซ้ำซ้าย (Left recursion)

11 ตัวประกอบซ้าย (left factoring)
CFG: X1 |  2 เมื่อ  จะไม่เป็นไวยากรณ์ LL(1) เพราะ FIRST( 1)  FIRST( 2)  เราเรียก  ว่า ตัวประกอบซ้าย (left-factoring) เราสามารถเขียนกฏซึ่งอยู่ในรูป X1| 2 |…| n เมื่อ  เป็น prefix ที่ยาวที่สุดและ  ดังนี้ XY Y1| 2 |…| n เมื่อ Y เป็น NT ตัวใหม่ ตัวประกอบซ้าย (left factoring)


ดาวน์โหลด ppt FIRST & FOLLOW Parsing Table

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


Ads by Google