ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
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) = สำหรับ ij 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 X1|X2|…|Xm|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: X1 | 2 เมื่อ จะไม่เป็นไวยากรณ์ LL(1) เพราะ FIRST( 1) FIRST( 2) เราเรียก ว่า ตัวประกอบซ้าย (left-factoring) เราสามารถเขียนกฏซึ่งอยู่ในรูป X1| 2 |…| n เมื่อ เป็น prefix ที่ยาวที่สุดและ ดังนี้ XY Y1| 2 |…| n เมื่อ Y เป็น NT ตัวใหม่ ตัวประกอบซ้าย (left factoring)
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.