Chainate, W.
หากเกิด error() ขึ้น แสดงว่า ข้อมูลเข้าไม่เป็นประโยค คอมไพเลอร์ที่ดี... o ไม่ควรหยุดเมื่อพบความผิดพลาดครั้งแรก o ควรรายงานความผิดพลาด และ recovery เพื่อให้สามารถดำเนินการ ตรวจสอบต่อไปได้ Panic mode recovery o ก่อนอื่น ให้จัดการกับ “ ช่องว่าง ” ใน parsing table o หาก M[A, a] = {empty} และ a เป็นสมาชิกของ FOLLOW(A) แล้วให้ใส่ค่าใน M[A, a] = sync Sync อ้างถึง synchronize symbol
Recovery strategy for M[A, a]: o ถ้า A เป็น NT และ M[A, a]={empty} แล้ว ให้ข้าม (skip) a ไปยังข้อมูล เข้าถัดไป o ถ้า A เป็น NT และ M[A, a]={sync} แล้ว ให้ pop A ออกจาก stack o ถ้า A เป็น T และ A a แล้ว ให้ pop token Non- terminal INPUT SYMBOL id+*()$ E A T B F E TA T FB F id A +TA BB B *FB F(E)F(E) T FB E TA BB AA AA BB sync
+id*+id$
เป็นการพยายามสร้างต้นไม้วิเคราะห์กระจายจากข้อมูลเข้า โดย เริ่มจากปลายกิ่งขึ้นไปยังโหนดราก อาจจกล่าวได้ว่าเป็นการลดทอน (reduce) ข้อมูลเข้าให้เป็น สัญลักษณ์เริ่มต้น ในแต่ละขั้นของการลดทอน จะแทนสายอักขระย่อยที่ตรงกับ สายอักขระทางขวาของกฏ ด้วยสัญลักษณ์ไม่สิ้นสุดที่อยู่ ทางซ้าย ข้อมูลเข้าคือ aaabc ไวยากรณ์ได้แก่ o (1) S aABc o (2-3) A Aa | a o (4) B b
aaabc ข้อมูลเข้าจะเป็นประโยค ถ้าสุดท้ายแล้วเหลือเพียงสัญลักษณ์ เริ่มต้นใน stack และสิ้นสุดข้อมูลเข้า มิฉะนั้น จะไม่ถือว่าข้อมูล เข้านี้เป็นประโยชน์ คำอธิบาย Stack ( ยอดอยู่ขวาสุด ) ข้อมูลเข้า เริ่มต้น aaabc$ เลื่อน (shift) aaabc$ Shiftaaabc$ ลดทอน (reduce) ด้วยกฏ 3 aAabc$ ShiftaAabc$ Reduce with rule 2aAbc$ ShiftaAbc$ Reduce with rule 4aABc$ ShiftaABc$ Reduce with rule 1S$
Simple Left to Right, Right derivation (1 lookahead symbol) General parser behavior: s : top of stack a : current input 1.If action[s, a]=“accept” halt, accept, success 2.If action[s, a]= r# “reduce by production A (rule #)” do the following: 2a. Pop 2*| | elements from the stack. (after that assume t = top symbol in stack) 2b. Push A 2c. Push a value in goto[t, A] 3.If action[s, a]= s# “shift and goto state s*” Shift; push a and # then read next lookahead
(1-2) E E+T | T (3-4) T T*F | F (5-6) F (E) | id ข้อมูลเข้า : id+id*id สถา นะ ตารางกระทำ (action) ตารางกระโดด (goto) id+*()$ETF 0s5s4123 1s6accept 2r2s7r2R2 3r4 4s5s4823 5r6 6s5s493 7s5s410 8s6S11 9r1s7r1 10r3 11r5