1 / 114

บทที่ 8 : Top-Down Processing

บทที่ 8 : Top-Down Processing. รายชื่อสมาชิก 1. นางสาวนพรัตน์ เตชะเมลืองกุล 4205212 2. นางสาวพิลาสลักษณ์ สาระไชย 4205285 3. นางสาวมณฑิชา ป้องป้อม 4205315 4. นางสาวรัชนีกร วงศ์แสง 4205335. token. บทที่ 8 : Top-Down Processing.

mimi
Download Presentation

บทที่ 8 : Top-Down Processing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. บทที่ 8 : Top-Down Processing รายชื่อสมาชิก 1. นางสาวนพรัตน์ เตชะเมลืองกุล 4205212 2. นางสาวพิลาสลักษณ์ สาระไชย 4205285 3. นางสาวมณฑิชา ป้องป้อม 4205315 4. นางสาวรัชนีกร วงศ์แสง 4205335

  2. token บทที่ 8 : Top-Down Processing Syntax box (parser) tree Syntax analysis

  3. 8.1 INTRODUCTION • ในบทนี้เราจะมาศึกษาให้เจาะลึกไปอีกว่า pushdown machine จะ • ทำการ recognition และ translation ให้สำเร็จได้เมื่อไร และอย่างไร • processor ใดๆ ที่ดำเนินการเกี่ยวกับ recognition ของ productions • จะถูกเรียกว่าparser • Parsing methods แบ่งได้เป็น 2 categories คือ • top-down และ bottom-up • Pushdown machines สามารถถูกออกแบบโดยใช้วิธีการ top-down • หรือ bottom-up อย่างใดอย่างหนึ่ง

  4. 8.1 INTRODUCTION • เราจะเริ่มศึกษา pushdown machine processing • กับวิธีการ top-down • top-down parsing กับ pushdown machine บางครั้งถูกเรียกว่า • deterministic top-down parsing • เราจะสมมติ grammar ในบทนี้ว่าเป็น grammar ภายใต้ • การพิจารณา ที่ไม่มี extraneous nonterminals

  5. 8.2 AN EXAMPLE 8.2AN EXAMPLE • แสดง one-state pushdown recognizer จาก processing ต่อไปนี้ • 1. <S> d <S> <A> • 2. <S> b <A> c • 3. <A> d <A> • 4. <A> c Stack symbol set = { <S>, <A>, c, } Starting stack = <S>

  6. 8.2 AN EXAMPLE 8.2AN EXAMPLE Input sequence = d b c c dc Leftmost derivation : • <S> d <S> <A> d b <A> c <A> • d b c c <A> d b c c d <A> d b c c d c Derivation tree : <S> d <S> <A> d c <A> b <A> c c

  7. 8.2AN EXAMPLE 8.2 AN EXAMPLE 1: <S> d b c c d c 1 2: <A> <S> b c c d c 2 3: <A> c <A> c c d c 4 4: <A> c c d c c c 5: <A> d c 3 6: <A> c 4 7: 8: ACCEPT

  8. 8.2 AN EXAMPLE 8.2AN EXAMPLE Past inputsStackIntermediate string in the leftmost derivation 1: <S> <S> 2: d <S> <A> d <S> <A> 3: d b <A> c <A> d b <A> c <A> 4: d b c c <A> 5: d b c c <A> 6: d b c c d <A> d b c c d <A> 7: d b c c d c d b c c d c d b c c <A> ความสัมพันธ์ระหว่าง configurations of the pushdown machine และ leftmost derivation

  9. 8.2 AN EXAMPLE 8.2AN EXAMPLE d b c --| REPLACE(c<A>) REPLACE(<A><S>) <S> REJECT REJECT ADVANCE ADVANCE REPLACE(<A>) POP <A> REJECT REJECT ADVANCE ADVANCE POP c REJECT REJECT REJECT ADVANCE REJECT REJECT REJECT ACCEPT Starting stack: <S> Control table of the pushdown machine

  10. 8.3 S-GRAMMARS 8.3 S-GRAMMARS มีเงื่อนไข 2 ข้อ ต่อไปนี้ 1. righthand side ของแต่ละ production ต้องเริ่มต้นด้วย terminal symbol • 2. ถ้ามี 2 production ที่มี lefthand side เหมือนกันแล้ว righthand side • ต้องเริ่มต้นด้วย terminal symbols ที่ต่างกัน

  11. ไม่ผ่านเงื่อนไขข้อ 1 ไม่ผ่านเงื่อนไขข้อ 2 8.3 S-GRAMMARS 8.3 S-GRAMMARS จากเงื่อนไขข้างต้น เราจะทำการตรวจสอบว่า grammar ต่อไปนี้ เป็น s-grammars หรือไม่ • 1. <S> a <T > • 2. <S> <T> b <S> • 3. <T> b <T> • 4. <T> b a ดังนั้น ตัวอย่างนี้ไม่เป็น s-grammars

  12. 8.3 S-GRAMMARS 8.3 S-GRAMMARS พิจารณาอีกตัวอย่างหนึ่งซึ่งกำหนด grammar ดังนี้ • 1. <S> a b <R > • 2. <S> b <R> b <S> • 3. <R> a • 4. <R> b <R> ผ่านเงื่อนไขทั้ง 2 ข้อ ดังนั้น ตัวอย่างนี้เป็น s-grammars

  13. 8.3 S-GRAMMARS 8.3 S-GRAMMARS เทคนิคการออกแบบ control table นี้ อาจถูก applied โดย s-grammars โดยใช้กฎต่อไปนี้ 1. input set เป็น terminal set ของ grammar ซึ่งรวม endmarker ด้วย 2. set ของ stack symbol ประกอบด้วย bottommarker, nonterminal symbols ของ grammar และ terminal symbols ที่ไม่ปรากฏอยู่ทางซ้ายสุดใน righthand side ของ production

  14. 8.3 S-GRAMMARS 8.3 S-GRAMMARS • 3. The starting stack ประกอบด้วย bottommarker และ • starting nonterminal • 4. The control ถูกอธิบายโดย one-state control table ที่มี rows เป็น • stack symbols และ columns เป็น input symbols และมี entries • บรรยายไว้ในตาราง

  15. 8.3 S-GRAMMARS 8.3 S-GRAMMARS • 5. A table entry เป็นของแต่ละ production ใน grammar ซึ่ง • production จะมีรูปแบบดังนี้ • <A> b entry สำหรับ row <A> และ column b คือ REPLACE(r ), ADVANCE • ถ้า production เป็น <A> bสามารถใช้ operation • POP, ADVANCE • แทน REPLACE( ) ได้

  16. 8.3 S-GRAMMARS 8.3 S-GRAMMARS • 6. ถ้า terminal b เป็น stack symbol แล้ว table entry สำหรับ • row b และ column b คือ • POP, ADVANCE • 7. The table entry สำหรับ bottommarker row และ • endmarker column คือ • ACCEPT • 8. ทุกๆ table entry ที่ไม่เข้าในกฎข้อ 5, 6 และ 7ผลที่ได้คือ • REJECT

  17. 8.4 TOP-DOWN PROCESSING OF TRANSLATION GRAMMARS ในหัวข้อนี้เราจะพิจารณาปัญหาของการแปล String แบบ syntax-directed โดยใช้ string translation grammar โดย ในขณะนี้จะพิจารณา input grammar ที่เป็น s-grammar โดยจะแสดงว่า การแปล String นี้สามารถทำได้โดยการใช้ pushdown machine ที่พัฒนามาจาก standard pushdown recognizer สำหรับ s-grammar ที่ถูกสร้างจากกฎที่กล่าวมา แล้วในหัวข้อก่อนหน้านี้

  18. สมมติให้มี string translation grammar ที่มี production หนึ่งเป็น <A> --> {v}a{w}<B>{x}c{y}<D>{z} output symbols v, w, x, y และ z ออกมาในเวลาที่เหมาะสม OUT(vw), REPLACE({z} <D> {y} C {x} <B> ), ADVANCE ซึ่งจะมี input production คือ <A> --> a<B>c<D> REPLACE (<D>c<B>),ADVANCE

  19. เราจะสมมติTRANSLATION GRAMMAR ที่มี Starting Symbol เป็น <A> และมี Production ดังนี้ 1. <A> --> {v} a {w} <B> {x} c {y} <D> {z} 2. <A> --> b 3. <B> --> c {r} 4. <B> --> a {m} <A> 5. <D> --> c <D> {n} 6. <D> --> {S} b จะได้ผลลัพธ์ของ Pushdown Control ดังนี้

  20. กฏสำหรับ TOP-DOWN PUSHDOWN TRANSLATOR ที่มี INPUT GRAMMAR เป็น S-GRAMMAR ดังนี้คือ 1.INPUT SET คือ INPUT SET ของ GRAMMAR รวมกับ ENDMARKER 2.set ของ stack symbol ประกอบด้วย bottommarker, nonterminal symbol ของGRAMMAR โดยมี INPUT SYMBOL ซึ่งอยู่ทางขวามือของ production ของ INPUT GRAMMAR ในตำแหน่งอื่นๆที่ไม่ใช่ซ้ายสุด และต้องเป็นไปตามกฎข้อ 5 3.STARTING STACK จะต้องประกอบไปด้วย bottommarker และ starting nonterminal 4.CONTROL จะอธิบายโดย ONE-STATE CONTROL TABLE ซึ่ง ROW คือ STACK SYMBOLSและ COLUMN คือ INPUT SYMBOLS

  21. 5.ช่องในตารางมีไว้เพื่อให้พิจารณาในแต่ละ production ใน GRAMMAR โดยที่ Production มีรูปแบบดังนี้ โดย <A> คือ nonterminal b คือ terminal คือ SEQUENCE ของ ACTION SYMBOL (หรืออาจจะเป็น NULL) aคือ SEQUENCE ของ ACTION, nonterminal และ terminal SYMBOL ที่ไม่ได้เริ่มต้นด้วย ACTION SYMBOL และในทำนองเดียวกันเราจะได้ entry สำหรับกรณีนี้ซึ่งมี top of stack ที่เป็น <A> และมี input เป็น b คือ

  22. 6.ถ้า terminal b คือ stack symbol แล้ว Table entry สำหรับ ROW b และ COLUMN b คือ POP ,ADVANCE 7.Table entry สำหรับกรณีที่มี ROW เป็น bottommarker และ COLUMN เป็น ENDMARKER คือ ACCEPT 8.ถ้า ACTION SYMBOL {x} คือ stack symbol แล้ว entry สำหรับ ROW {x} คือ OUT{x}, POP,RETAIN 9.นอกเหนือจากกฎข้อ 5,6,7 และ 8 คือREJECT

  23. a b c -| REJECT REJECT <A> <B> <D> c #1 #2 #4 REJECT #3 REJECT REJECT REJECT #6 #5 POP ADVANCE REJECT REJECT REJECT ACCEPT REJECT REJECT REJECT {x} {v} {z} {n} OUT(x),POP,RETAIN OUT(v),POP,RETAIN OUT(z),POP,RETAIN OUT(n),POP,RETAIN Starting stack : <A>

  24. #1 OUT(vw), REPLACE({z}<D>{y}c{x}<B>),ADVANCE #2 POP,ADVANCE #3 OUT(r),POP.ADVANCE #4 OUT(m),REPLACE(<A>),ADVANCE #5 REPLACE({n}<D>),ADVANCE #6 OUT(s),POP,ADVANCE

  25. การ MOVE STACK ของ PUSHDOWN MACHINE TRANSLAING a c c b INTO v w r x y s z ระหว่างแต่ละคู่ของ STACK ที่อยู่ใกล้กันคือลิสต์ของ OUTPUT OPERATION ที่เกิดขึ้นระหว่าง transition นั้น 1: ∇ <A> a c c b --| OUT(vw) 2: ∇ {z}<D>{y}c{x}<B> c c b --| OUT(r) 3: ∇ {z}<D>{y}c{x} c b --| OUT(x) 4: ∇ {z}<D>{y}c c b --| 5: ∇ {z}<D>{y} b --| OUT(y) 6: ∇ {z}<D> b --| OUT(s) 7: ∇ {z} --| OUT(z) 8: ∇ --| 9: ACCEPT

  26. 8.5 Q- GRAMMARS พิจารณา Grammar ต่อไปนี้โดยที่มี starting nonterminal <S> 1. <S> --> a<A><S> 2. <S> --> b 3. <A> --> c<A><S> 4. <A> --> Grammar ข้างต้นนี้ไม่เป็น S-grammar เพราะผลลัพธ์ทางขวามือของ production 4 ไม่ได้เริ่มต้นด้วย terminal แต่ pushdown machine ยังสามารถที่จะนำเอา grammar นี้ไปใช้ได้ โดยการอ้างฟอร์มของ input ที่ยังเหลืออยู่

  27. <S> a <A> <S> a <A> <S> c <A> <S> b b

  28. Stack movie

  29. a b c -| REJECT REJECT <S> <A> #1 #2 #4 #4 #3 #4 REJECT REJECT ACCEPT REJECT Starting stack : <S> #1 REPLACE(<S><A>),ADVANCE #2 POP,ADVANCE #3 REPLACE(<S><A>),ADVANCE #4 POP,RETAIN

  30. concept ของ “ follow set ” ของ nonterminal ให้ context-free grammar ซึ่งมี starting symbol เป็น <S> และมี nonterminal เป็น <X> จะสามารถเขียนได้เป็น FOLLOW(<X>)ซึ่งเป็น set ของ input symbols ที่สามารถตามด้วย <X> ใน intermidiate string ที่ derive จาก <S> –| ได้ ซึ่งจะเรียก set นี้ว่า follow set of <X>. ในการวิเคราะห์ครั้งก่อนเราสังเกตเห็นว่า nonterminal <A> สามารถถูกตามด้วย a หรือ b เท่านั้นซึ่งเราสามารถเขียนให้อยู่ใน รูปของสมการได้เป็น FOLLOW(<A>) = {a,b}

  31. context free grammar ที่จะเป็น q-grammar ได้นั้น ต้องอยู่ในเงื่อนไข 2 ข้อดังนี้ 1.ทางขวาของแต่ละ production จะต้องเป็นหรือขึ้นต้นด้วย terminal symbols 2.production ทางซ้ายที่เหมือนกันจะต้องเป็น selection set ที่ไม่ต่อเนื่อง(disjoint selection set)

  32. พิจารณา concept ของ selection set ของ production • ถ้า production ของ grammar อยู่ในรูปแบบ • ซึ่งมี b เป็น terminal symbol และaเป็น string ของ terminal • และ nonterminal symbol เราจะได้ว่า • - ถ้า production อยู่ในรูปจะได้ว่า • ถ้า p เป็นจำนวนของ production จะสามารถเขียน • SELECT(p) แทนได้และเราเรียก • SELECT(p) ว่า selection set ของ production p

  33. ตัวอย่าง input ที่อยู่ในรูปของ selection set ของ production ใน pushdown control SELECT(1) = SELECT(<S>) --> a<A><S>) = {a} SELECT(2) = SELECT(<S>) --> b) = {b} SELECT( 1 ) ∩ SELECT( 2 ) = {a} ∩ {b} = { } SELECT(3) = SELECT(<A>) --> c<A><S>) = {c} SELECT(4) = SELECT(<A>) --> ) = FOLLOW(<A>) = {a,b} SELECT( 3 ) ∩ SELECT( 4 ) = {c} ∩ {a ,b} = { }

  34. กฎสำหรับ q-grammar กฎข้อ 5 ควรจะถูกแทนที่ด้วยกฎ 2 ข้อ 5' : production จะถูก apply เมื่อ stack symbol อยู่ทางซ้ายและ เมื่อ input อยู่ใน selection set จะ apply production ที่อยู่ในรูปแบบ โดยที่ b เป็น terminal และaเป็น string ของ terminal และ nonterminal ให้ใช้ transition REPLACE(a), ADVANCE ถ้า production เป็น <A> --> b จะใช้ transition POP ,ADVANCE และถ้าหากจะ apply production ที่อยู่ในรูปแบบ <A> --> ให้ใช้ transition POP, RETAIN

  35. 5'' ถ้ามี -production ของ nonterminal <A> และไม่มี entry ของ stack symbol <A> และ input b ที่ถูกแสดงโดยกฎ 5' entry สามารถที่จะ apply ได้ทั้ง-production หรือ REJECT ก็ได้

  36. ตัวอย่างพิจารณา grammar ต่อไปนี้ที่มี starting symbol <S> 1.<S> --> a<A> 2.<S> --> b 3.<A> --> c<S>a 4.<A> --> สำหรับ grammar นี้ <A> สามารถถูกตามด้วย a หรือ–| ก็ได้ จะแสดงให้เห็นด้วย intermidiate string a c a <A> a –| และ a <A> –|

  37. และจากตัวอย่างจะได้ selection set ดังนี้ SELECT( 1 ) = {a} SELECT( 2 ) = {b} SELECT( 3 ) = {c} SELECT( 4 ) = {a, –| } และเนื่องจาก SELECT( 1 ) และ SELECT( 2 ) เป็น disjoint set คือเป็นเซตที่ไม่ต่อเนื่องกันและ SELECT( 3 ) และ SELECT( 4 ) ก็เป็น disjoint set ด้วยดังนั้นgrammar นี้จะเป็น q-grammar

  38. a b c -| REJECT REJECT <S> <A> a #1 #2 #4 #3 #4 #4 or REJECT POP ADVANCE REJECT REJECT REJECT REJECT REJECT ACCEPT REJECT Starting stack : <S> #1 REPLACE(<A>),ADVANCE #2 POP,ADVANCE #3 REPLACE(a<S>),ADVANCE #4 POP,RETAIN

  39. การ Translation ที่มี input grammar ที่เป็น Q-Grammar ตัวอย่างพิจารณา translation grammar ต่อไปนี้ด้วย starting symbol <S> 1.<S> --> a{x} <A> {y} 2.<S> --> b{z} 3.<A> --> c<S>{v} a 4.<A> --> {w}

  40. a b c -| REJECT REJECT <S> <A> #1 #2 #4 #3 #4 #4 or REJECT POP ADVANCE a REJECT REJECT REJECT REJECT ACCEPT REJECT REJECT {y} {v} OUT(y),POP,RETAIN OUT(v),POP,RETAIN Starting stack : <S>

  41. #1 OUT(x), REPLACE({y}<A>), ADVANCE #2 OUT(z), POP, ADVANCE #3 REPLACE( a{v}<S> ) , ADVANCE #4 OUT<w>, POP, RETAIN

  42. 8.6 LL(1) GRAMMARS เงื่อนไขของ LL(1) GRAMMARS • 1. symbol ตัวแรกของ righthand side ของ production • เป็นได้ทั้ง terminal, nonterminal และ null • 2. ถ้ามี 2 production ที่มี lefthand side เหมือนกันแล้ว • righthand side ต้องเริ่มต้นด้วย symbol ที่ต่างกัน

  43. 8.6 LL(1) GRAMMARS • ตัวอย่าง • 1. <S> --><A> b <B> • 2. <S> --> d • 3. <A> --> <C> <A> b • 4. <A> --> <B> • 5. <B> --> c <S> d • 6. <B> --> • 7. <C> --> a • 8. <C> --> e d

  44. 8.6 LL(1) GRAMMARS SELECTION SETS จาก section ที่แล้ว เมื่อมี b เป็น input symbol อยู่ใน selection set ของ production ที่ด้านซ้ายเป็น <A> จะมีเงื่อนไขอยู่ 2 ข้อ คือ 1.ด้านขวาของ production จะต้องเริ่มต้นด้วย b 2. ด้านขวาของ production จะต้องเป็น และ b จะอยู่ใน FOLLOW(<A>)

  45. 8.6 LL(1) GRAMMARS SELECTION SETS ใน section นี้จะกล่าวถึงเงื่อนไขทั้ง 2 ข้อนี้อย่างกว้างๆ โดยจะพิจารณา concept ที่ว่า “ด้านขวาของ production จะต้องเริ่มต้นด้วย b” และ “ด้านขวาของ production จะต้องเป็น ” ซึ่งจาก concept นี้ทำให้เราสามารถกำหนด selection sets สำหรับ productions ที่ด้านขวาเริ่มต้นด้วย nonterminal ได้

  46. 8.6 LL(1) GRAMMARS SELECTION SETS • สมมุติว่าเราจะสร้าง top – down pushdown recognizer สำหรับ grammar ที่ประกอบด้วย production • <A> --> b <A> <S> • จากที่เราทราบว่า sequence ใดๆที่ derive มาจาก <A> นั้น จะต้องเริ่มต้นด้วย b • สรุปได้ว่า production นี้จะถูก apply ถ้า top stack symbol คือ <A> และ current input คือ b

  47. 8.6 LL(1) GRAMMARS SELECTION SETS • สมมุติว่าเราจะสร้าง top – down pushdown recognizer สำหรับ grammar ที่ประกอบด้วย production • <S> --> <A> b <B> • และสมมุติว่า แต่ละ terminal string ที่เกิดมาจากด้านขวา จะเริ่มต้นด้วย terminal ตัวใดตัวหนึ่งใน set : {a,b,c,e} • เราจะสรุปได้ว่า production นี้จะถูก “apply” ถ้า top stack symbol คือ <S> และ current input เป็น a,b,c หรือ e

  48. 8.6 LL(1) GRAMMARS SELECTION SETS apply : การแทนที่ <S> ที่ top of stack ด้วยด้านขวาของ production และ retain input ไว้ ซึ่ง transition จะเป็น REPLACE(<B> b <A>) , RETAIN REPLACE operation แสดงให้เห็นว่า <S> จะต้องตามด้วย <A>, b และ <B> ตามลำดับ และ current input จะต้อง retain ไว้ เนื่องจากยังเป็นส่วนหนึ่งของ sequence ที่แทนที่ด้วย symbol บน stack

  49. 8.6 LL(1) GRAMMARS SELECTION SETS การหา Selection sets ของ production ที่อยู่ในรูปแบบ arbitrary form • กำหนด production • <A> --> • เมื่อ  เป็น string ของ terminals และ nonterminals • 1. ถ้า  ไม่ใช่ nullable เราจะกำหนด • SELECT(<A> --> ) = FIRST() • 2. ถ้า  เป็น nullable จะได้ • SELECT(<A> --> ) = FIRST()  FOLLOW(<A>)

  50. 8.6 LL(1) GRAMMARS SELECTION SETS ถ้า p เป็นหมายเลขของ production เราจะใช้ SELECT(p) แทน SELECT(<A> --> ) ซึ่งจะเหมือนกับคำจำกัดความของ SELECT จากตอนที่แล้ว

More Related