บทที่ 8 : top-down processing

114
บบบบบ บบบบบ 8 8 : : Top-Down Top-Down Processing Processing รรรรรรรรรรรรร 1. รรรรรรรรรรรรร รร รรรรรรรรรรร 4205212 2. รรรรรรรรรรรรรรรรร รรรรรรร 4205285 3. รรรรรรรรรรรร รรรรรรรร 4205315 4. รรรรรรรรรรรรร

Upload: mimi

Post on 15-Jan-2016

78 views

Category:

Documents


0 download

DESCRIPTION

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

TRANSCRIPT

Page 1: บทที่ 8  :  Top-Down Processing

บทท�� บทท�� 8 8 : : - Top Down- Top DownProcessingProcessing

รายชื่��อสมาชื่ก

1. นางสาวนพร�ตน� เตชื่ะเมลื�องก�ลื 4205212

2. นางสาวพลืาสลื�กษณ์� สาระไชื่ย 4205285

3 . นางสาวมณ์ฑิชื่า ป้�องป้�อม 4205315

4. นางสาวร�ชื่น�กร วงศ์�แสง 4205335

Page 2: บทที่ 8  :  Top-Down Processing

บทท�� บทท�� 8 8 : : - Top Down- Top DownProcessingProcessing

Syntax box (parser)

treetoken

Syntax analysis

Page 3: บทที่ 8  :  Top-Down Processing

8.1 INTRODUCTION8.1 INTRODUCTION

• ในบทน�$เราจะมาศ์&กษาให้(เจาะลื&กไป้อ�กว)า pushdown machine จะ ท*าการ recognition แลืะ translation ให้(ส*าเร+จได้(เม��อไร แลืะอย)างไร

• processor ใด้ๆ ท��ด้*าเนนการเก��ยวก�บ recognition ของ productions จะถู0กเร�ยกว)า parser

• Parsing methods แบ)งได้(เป้1น 2 categories คื�อ top-down แลืะ bottom-up

• Pushdown machines สามารถูถู0กออกแบบโด้ยใชื่(วธี�การ top-down ห้ร�อ bottom-up อย)างใด้อย)างห้น&�ง

Page 4: บทที่ 8  :  Top-Down Processing

• เราจะเร�มศ์&กษา pushdown machine processing ก�บวธี�การ top-down

• top-down parsing ก�บ pushdown machine บางคืร�$งถู0กเร�ยกว)า deterministic top-down parsing

• เราจะสมมต grammar ในบทน�$ว)าเป้1น grammar ภายใต( การพจารณ์า ท��ไม)ม� extraneous nonterminals

8.1 INTRODUCTION8.1 INTRODUCTION

Page 5: บทที่ 8  :  Top-Down Processing

8.2 AN EXAMPLE

1. <S> d <S> <A>2. <S> b <A> c3. <A> d <A>

4. <A> c

• แสด้ง one-state pushdown recognizer จาก processing ต)อไป้น�$

Stack symbol set = { <S>, <A>, c, }

8.2 AN EXAMPLE8.2 AN EXAMPLE

Starting stack = <S>

Page 6: บทที่ 8  :  Top-Down Processing

8.2 AN EXAMPLEInput sequence = d b c c d c

<S>

<S>

<A><A

><A>

d

d

c

cc

b

Derivation tree :

<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

Leftmost derivation :

8.2 AN EXAMPLE8.2 AN EXAMPLE

Page 7: บทที่ 8  :  Top-Down Processing

8.2 AN EXAMPLE

1: <S> d b c c d c 12: <A> <S> b c c d c 23: <A> c <A> c c d c 44: <A> c c d c c c5: <A> d c 36: <A> c 47:8: ACCEPT

8.2 AN EXAMPLE8.2 AN EXAMPLE

Page 8: บทที่ 8  :  Top-Down Processing

8.2 AN EXAMPLE

Past inputs Stack Intermediate string in the leftmost derivation1: <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

คืวามส�มพ�นธี�ระห้ว)าง configurations of the pushdown machine แลืะ leftmost derivation

d b c c <A>

8.2 AN EXAMPLE8.2 AN EXAMPLE

Page 9: บทที่ 8  :  Top-Down Processing

8.2 AN EXAMPLE8.2 AN EXAMPLE8.2 AN EXAMPLE

d b c --|

Starting stack: <S>

<S>

<A>

c

REPLACE(<A><S>)ADVANCE

REPLACE(c<A>)ADVANCE

REPLACE(<A>)ADVANCE

REJECT

REJECT

REJECT

REJECT

REJECT

REJECT REJECT

POPADVANCE

POPADVANCE

REJECT

REJECT

REJECT

ACCEPT

Control table of the pushdown machine

Page 10: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS

ม�เง��อนไข 2 ข(อ ต)อไป้น�$

1. righthand side ของแต)ลืะ production ต(องเร�มต(นด้(วย terminal symbol

2. ถู(าม� 2 production ท��ม� lefthand side เห้ม�อนก�นแลื(ว righthand side ต(องเร�มต(นด้(วย terminal symbols ท��ต)างก�น

8.3 8.3 SS-GRAMMARS-GRAMMARS

Page 11: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARSจากเง��อนไขข(างต(น เราจะท*าการตรวจสอบว)า grammar ต)อไป้น�$เป้1น s-grammars ห้ร�อไม)

1. <S> a <T >2. <S> <T> b <S>3. <T> b <T>

4. <T> b a

ไม)ผ่)านเง��อนไขข(อ 1

ไม)ผ่)านเง��อนไขข(อ 2

ด้�งน�$น ต�วอย)างน�$ไม)เป้1น s-grammars

8.3 8.3 SS-GRAMMARS-GRAMMARS

Page 12: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARSพจารณ์าอ�กต�วอย)างห้น&�งซึ่&�งก*าห้นด้ grammar ด้�งน�$

1. <S> a b <R >2. <S> b <R> b <S>3. <R> a4. <R> b <R>

ผ่)านเง��อนไขท�$ง 2 ข(อ ด้�งน�$น ต�วอย)างน�$เป้1น s-grammars

8.3 8.3 SS-GRAMMARS-GRAMMARS

Page 13: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARSเทคืนคืการออกแบบ control table น�$ อาจถู0ก applied โด้ย s-grammars โด้ยใชื่(กฎต)อไป้น�$

1. input set เป้1น terminal set ของ grammar ซึ่&�งรวม endmarker ด้(วย

8.3 8.3 SS-GRAMMARS-GRAMMARS

2. set ของ stack symbol ป้ระกอบด้(วย bottommarker, nonterminal symbols ของ grammar แลืะ terminal symbols ท��ไม)ป้รากฏอย0)ทางซึ่(ายส�ด้ใน righthand side ของ production

Page 14: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.3 8.3 SS-GRAMMARS-GRAMMARS

3. The starting stack ป้ระกอบด้(วย bottommarker แลืะ starting nonterminal

4. The control ถู0กอธีบายโด้ย one-state control table ท��ม� rows เป้1น stack symbols แลืะ columns เป้1น input symbols แลืะม� entries บรรยายไว(ในตาราง

Page 15: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.3 8.3 SS-GRAMMARS-GRAMMARS

5. A table entry เป้1นของแต)ลืะ production ใน grammar ซึ่&�ง production จะม�ร0ป้แบบด้�งน�$

<A> b entry ส*าห้ร�บ row <A> แลืะ column b คื�อ REPLACE( r ), ADVANCE

ถู(า production เป้1น <A> b สามารถูใชื่( operation POP, ADVANCE

แทน REPLACE( ) ได้(

Page 16: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.3 8.3 SS-GRAMMARS-GRAMMARS

6 . ถู(า terminal b เป้1น stack symbol แลื(ว table entry ส*าห้ร�บ row b แลืะ column b คื�อ

POP, ADVANCE

7 . The table entry ส*าห้ร�บ bottommarker row แลืะ eeee eeeee eeeee e คื�อ

ACCEPT

8 . ท�กๆ table entry ท��ไม)เข(าในกฎข(อ 5 , 6 แลืะ 7 ผ่ลืท��ได้(คื�อ REJECT

Page 17: บทที่ 8  :  Top-Down Processing

8.4 TOP-DOWN 8.4 TOP-DOWN PROCESSING OF PROCESSING OF TRANSLATION GRAMMARSTRANSLATION GRAMMARS

ในห้�วข(อน�$เราจะพจารณ์าป้;ญห้าของการแป้ลื String แบบ - syntax directed โด้ยใชื่( string translation grammar โด้ย

ในขณ์ะน�$จะพจารณ์า input grammar ท��เป้1น - s grammarโด้ยจะแสด้งว)า การแป้ลื String น�$สามารถูท*าได้(โด้ยการใชื่( eeeeeee e e eeeeee ท��พ�ฒนามาจาก standard pushdown

recognizer ส*าห้ร�บ - s grammar ท��ถู0กสร(างจากกฎท��กลื)าวมาแลื(วในห้�วข(อก)อนห้น(าน�$

Page 18: บทที่ 8  :  Top-Down Processing

สมมตให้(ม� string translation grammar ท��ม� production ห้น&�งเป้1น -- <A> > {v} a {w} <B> {x} c {y} <D> { z}

REPLACE (<D>c<B>),ADVANCE

output symbols v, w, x, y แลืะ z ออกมาในเวลืาท��เห้มาะสมOUT(vw), REPLACE({z} <D> {y} C {x} <B> ), ADVANCE

ซึ่&�งจะม� input production คื�อ -- <A> > a <B> c <D>

Page 19: บทที่ 8  :  Top-Down Processing

เราจะสมมตTRANSLATION GRAMMAR ท��ม� Starting Symbolเป้1น <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 ด้�งน�$

Page 20: บทที่ 8  :  Top-Down Processing

กฏสำ�หรั�บ 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 ซึ่&�งอย0)ทางขวาม�อของproduction ของ INPUT GRAMMAR ในต*าแห้น)งอ��นๆ ท��ไม)ใชื่)ซึ่(ายส�ด้แลืะต(องเป้1นไป้ตามกฎข(อ 5

3.STARTING STACK จะต(องป้ระกอบไป้ด้(วย bottommarker แลืะ starting nonterminal 4.CONTROL จะอธีบายโด้ย ONE-STATE CONTROL TABLE ซึ่&�ง ROW คื�อ STACK SYMBOLSแลืะ COLUMN คื�อ INPUT SYMBOLS

Page 21: บทที่ 8  :  Top-Down Processing

5.ชื่)องในตารางม�ไว(เพ��อให้(พจารณ์าในแต)ลืะ production ใน GRAMMAR โด้ยท�� Production ม�ร0ป้แบบด้�งน�$ โด้ย <A> คื�อ nonterminal b คื�อ terminal

คื�อ SEQUENCE ของ ACTION SYMBOL (ห้ร�ออาจจะเป้1น NULL)        คื�อ SEQUENCE ของ ACTION, nonterminal แลืะ terminal SYMBOL ท��ไม)ได้(เร�มต(นด้(วย ACTION SYMBOL แลืะในท*านองเด้�ยวก�นเราจะได้( entry ส*าห้ร�บกรณ์�น�$ซึ่&�งม� top of stack ท��เป้1น <A> แลืะม� input เป้1น b คื�อ

Page 22: บทที่ 8  :  Top-Down Processing

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

Page 23: บทที่ 8  :  Top-Down Processing

a b c -|<A><B><D> c

{x}{v}{z}{n}

Starting stack : <A>

#1 #2#3#4#5#6POP

ADVANCE

ACCEPT

REJECTREJECTREJECT REJECT

REJECT REJECTREJECTREJECT REJECT

REJECTREJECTREJECTOUT(x),POP,RETAINOUT(v),POP,RETAINOUT(z),POP,RETAINOUT(n),POP,RETAIN

Page 24: บทที่ 8  :  Top-Down Processing

#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

Page 25: บทที่ 8  :  Top-Down Processing

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

การ MOVE STACK ของ PUSHDOWN MACHINE TRANSLAING a c c b INTO v w r x y s z ระห้ว)างแต)ลืะคื0)ของ STACK ท��อย0)ใกลื(ก�นคื�อลืสต�ของ OUTPUT OPERATION ท��เกด้ข&$นระห้ว)าง transition น�$น

Page 26: บทที่ 8  :  Top-Down Processing

8.5 Q- GRAMMARS8.5 Q- GRAMMARS

พจารณ์า Grammar ต)อไป้น�$โด้ยท��ม� starting nonterminal <S> 1. <S> --> a<A><S> 2. <S> --> b3. <A> --> c<A><S>4. <A> --> Grammar ข(างต(นน�$ไม)เป้1น S-grammar เพราะผ่ลืลื�พธี�ทางขวาม�อของ production 4 ไม)ได้(เร�มต(นด้(วย terminal แต) pushdown machine

ย�งสามารถูท��จะน*าเอา grammar น�$ไป้ใชื่(ได้( โด้ยการอ(างฟอร�มของ input ท��ย�งเห้ลื�ออย0)

Page 27: บทที่ 8  :  Top-Down Processing

<S>

a <A> <S>

c <A> <S>

a <A> <S>

b

b

Page 28: บทที่ 8  :  Top-Down Processing

Stack movie

Page 29: บทที่ 8  :  Top-Down Processing

a b c -|<S><A>

Starting stack : <S>

#1 #2#3#4

REJECTREJECT

REJECT ACCEPT#4#4

REJECTREJECT

#1 REPLACE(<S><A>),ADVANCE#2 POP,ADVANCE#3 REPLACE(<S><A>),ADVANCE#4 POP,RETAIN

Page 30: บทที่ 8  :  Top-Down Processing

concept concept ของของ “ “ follow set ” follow set ” ของของ nonterminalnonterminal

ให้( context-free grammar ซึ่&�งม� starting symbol เป้1น <S> แลืะม� nonterminal เป้1น <X> จะสามารถูเข�ยนได้(เป้1น FOLLOW(<X>) ซึ่&�งเป้1น set ของ input symbols ท��สามารถูตามด้(วย <X> ใน intermidiate string ท�� derive จาก <S> –| ได้( ซึ่&�งจะเร�ยก set น�$ว)า follow set of <X>.

ในการวเคืราะห้�คืร�$งก)อน เราส�งเกตเห้+นว)า nonterminal <A> สามารถูถู0กตามด้(วย a ห้ร�อ b เท)าน�$นซึ่&�งเราสามารถูเข�ยนให้(อย0)ในร0ป้ของสมการได้(เป้1นFOLLOW(<A>) = {a,b}

Page 31: บทที่ 8  :  Top-Down Processing

context free grammar context free grammar ท��จะเป็�นท��จะเป็�น q-grammar q-grammar ไดั�น��นไดั�น��นต้�องอยู่!"ในเง��อนไขต้�องอยู่!"ในเง��อนไข 2 2 ข�อข�อ ดั�งน��ดั�งน��

1.ทางขวาของแต)ลืะ production จะต(องเป้1น ห้ร�อข&$นต(นด้(วย terminal symbols 2.production ทางซึ่(ายท��เห้ม�อนก�นจะต(องเป้1น selection set ท��ไม)ต)อเน��อง(disjoint selection set)

Page 32: บทที่ 8  :  Top-Down Processing

พิ%จ�รัณ�พิ%จ�รัณ� concept concept ของของ selection set selection set ของของ productionproduction -ถู(า production ของ grammar อย0)ในร0ป้แบบซึ่&�งม� b เป้1น terminal symbol แลืะ เป้1น string ของ terminal แลืะ nonterminal symbol เราจะได้(ว)า

- ถู(า production อย0)ในร0ป้ จะได้(ว)า

-ถู(า p เป้1นจ*านวนของ production จะสามารถูเข�ยนSELECT(p) แทน ได้( แลืะเราเร�ยก SELECT(p) ว)า selection set ของ production p  

Page 33: บทที่ 8  :  Top-Down Processing

ต้�วอยู่"�งต้�วอยู่"�ง input input ท��อยู่!"ในรั!ป็ของท��อยู่!"ในรั!ป็ของ selection set selection set ของของ production production ในในpushdown control pushdown control

SELECT(1) = SELECT(<S>) --> a<A><S>) = {a} SELECT(2) = SELECT(<S>) --> b) = {b}

SELECT(3) = SELECT(<A>) --> c<A><S>) = {c} SELECT(4) = SELECT(<A>) --> ) = FOLLOW(<A>) = {a,b}

SELECT( 1 ) ∩ SELECT( 2 ) = {a} ∩ {b} = { }

SELECT( 3 ) ∩ SELECT( 4 ) = {c} ∩ {a ,b} = { }

Page 34: บทที่ 8  :  Top-Down Processing

กฎสำ�หรั�บกฎสำ�หรั�บ q-grammar q-grammar กฎข�อกฎข�อ 5 5 คืวรัจะถู!กแทนท��ดั�วยู่กฎคืวรัจะถู!กแทนท��ดั�วยู่กฎ 2 2 ข�อข�อ 5' : production จะถู0ก apply เม��อ stack symbol อย0)ทางซึ่(าย แลืะ เม��อ input อย0)ใน selection set จะ apply production ท��อย0)ในร0ป้แบบ

โด้ยท�� b เป้1น terminal แลืะ เป้1น string ของ terminal แลืะ nonterminal ให้(ใชื่( transition REPLACE(), ADVANCE ถู(า production เป้1น <A> --> b จะใชื่( transition POP ,ADVANCEแลืะถู(าห้ากจะ apply production ท��อย0)ในร0ป้แบบ <A> --> ให้(ใชื่( transition POP, RETAIN

Page 35: บทที่ 8  :  Top-Down Processing

5'' ถู(าม� -production ของ nonterminal <A> แลืะไม)ม� entry ของ stack symbol <A> แลืะ input b ท��ถู0กแสด้งโด้ยกฎ 5' entry สามารถูท��จะ apply ได้(ท�$ง -production ห้ร�อ REJECT ก+ได้(

Page 36: บทที่ 8  :  Top-Down Processing

ต�วอย)าง พจารณ์า grammar ต)อไป้น�$ท��ม� starting symbol <S> 1.<S> --> a<A> 2.<S> --> b 3.<A> --> c<S>a 4.<A> -->

ส*าห้ร�บ grammar น�$ <A> สามารถูถู0กตามด้(วย a ห้ร�อ –| ก+ได้( จะแสด้งให้(เห้+นด้(วย intermidiate string a c a <A> a –| แลืะ a <A> –|  

Page 37: บทที่ 8  :  Top-Down Processing

แลืะจากต�วอย)างจะได้( selection set ด้�งน�$ SELECT( 1 ) = {a} SELECT( 2 ) = {b}SELECT( 3 ) = {c} SELECT( 4 ) = {a, –| }

แลืะเน��องจาก SELECT( 1 ) แลืะ SELECT( 2 ) เป้1น disjoint set คื�อเป้1นเซึ่ตท��ไม)ต)อเน��องก�น แลืะ SELECT( 3 ) แลืะ SELECT( 4 ) ก+เป้1น disjoint set ด้(วย ด้�งน�$นgrammar น�$จะเป้1น q-grammar

Page 38: บทที่ 8  :  Top-Down Processing

a b c -|<S><A> a

Starting stack : <S>

#1 #2#3#4

POPADVANCE

REJECTREJECT#4 or REJECT

REJECT

REJECTREJECT ACCEPT

#4

REJECT

REJECTREJECT

#1 REPLACE(<A>),ADVANCE#2 POP,ADVANCE#3 REPLACE(a<S>),ADVANCE#4 POP,RETAIN

Page 39: บทที่ 8  :  Top-Down Processing

ก�รั ก�รั Translation Translation ท��มี� ท��มี� input grammar input grammar ท��เป็�น ท��เป็�น -Q Grammar-Q Grammar

1.<S> --> a{x} <A> {y} 2.<S> --> b{z} 3.<A> --> c<S>{v} a 4.<A> --> {w}

ต�วอย)าง พจารณ์า translation grammar ต)อไป้น�$ ด้(วย starting symbol <S>

Page 40: บทที่ 8  :  Top-Down Processing

a b c -|<S><A>

{y}{v}

Starting stack : <S>

#1 #2#3#4

POPADVANCE

REJECTREJECT#4 or REJECT

REJECT

REJECTREJECT

OUT(y),POP,RETAINOUT(v),POP,RETAIN

a REJECTREJECT

REJECTACCEPT

#4

Page 41: บทที่ 8  :  Top-Down Processing

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

Page 42: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

1. symbol ต�วแรกของ righthand side ของ production

เป้1นได้(ท�$ง terminal, nonterminal แลืะ null

2. ถู(าม� 2 production ท��ม� lefthand side เห้ม�อนก�นแลื(ว

righthand side ต(องเร�มต(นด้(วย symbol ท��ต)างก�น

เง��อนไขของ LL(1) GRAMMARS

Page 43: บทที่ 8  :  Top-Down Processing

ต้�วอยู่"�ง 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

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

Page 44: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETS จาก section ท��แลื(ว

เม��อม� b เป้1น input symbol อย0)ในselection set ของ production ท��ด้(าน

ซึ่(ายเป้1น <A> จะม�เง��อนไขอย0) 2 ข(อ คื�อ1. ด้(านขวาของ production จะต(องเร�ม

ต(นด้(วย b 2. ด้(านขวาของ production จะ

ต(องเป้1น แลืะ b จะอย0)ใน FOLLOW(<A>)

Page 45: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETS ใน section น�$ จะกลื)าวถู&งเง��อนไขท�$ง 2

ข(อน�$อย)างกว(างๆ โด้ยจะพจารณ์า concept ท�� ว)า

“ ด้(านขวาของ production จะต(องเร�ม ต(นด้(วย b” แลืะ

“ ด้(านขวาของ production จะต(องเป้1น”

ซึ่&�งจาก concept น�$ท*าให้(เราสามารถู ก*าห้นด้ selection sets ส*าห้ร�บ

productions ท��ด้(านขวาเร�มต(นด้(วยnonterminal ได้(

Page 46: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETS สมม�ตว)าเราจะสร(าง top – down

pushdown recognizer ส*าห้ร�บgrammar ท��ป้ระกอบด้(วย production

<A> --> b <A> <S> จากท��เราทราบว)า sequence ใด้ๆท��

derive มาจาก <A> น�$น จะต(องเร�มต(นด้(วยb

สร�ป้ได้(ว)า production น�$จะถู0ก apply ถู(า top stack symbol คื�อ <A> แลืะ

current input คื�อ b

Page 47: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETS สมม�ตว)าเราจะสร(าง top – down

pushdown recognizer ส*าห้ร�บgrammar ท��ป้ระกอบด้(วย production

<S> --> <A> b <B>แลืะสมม�ต ว)า แต)ลืะ terminal string ท��

เกด้มาจากด้(านขวา จะเร�มต(นด้(วย terminal ต�วใด้ต�วห้น&�งใน set : {a,b,c,e}

เราจะสร�ป้ได้(ว)า production น�$จะถู0ก“apply” ถู(า top stack symbol คื�อ <S>

แลืะ current input เป้1น a,b,c ห้ร�อ e

Page 48: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETSapply : การแทนท�� <S> ท�� top of

stack ด้(วยด้(านขวาของ production แลืะ retain input

ไว( ซึ่&�ง transition จะเป้1น

REPLACE(<B> b <A>) , RETAIN

REPLACE operation แสด้งให้(เห้+นว)า<S> จะต(องตามด้(วย <A>, b แลืะ <B>

ตามลื*าด้�บแลืะ current input จะต(อง retain ไว(

เน��องจากย�งเป้1นส)วนห้น&�งของ sequence ท�� แทนท��ด้(วย symbol บน stack

Page 49: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETS

การห้า Selection sets ของ production ท��อย0)ในร0ป้แบบ arbitrary form ก*าห้นด้ production

<A> --> เม��อ เป้1น string ของ terminals แลืะ

nonterminals 1. ถู(า ไม)ใชื่) nullable เราจะก*าห้นด้

SELECT(<A> --> ) = FIRST() 2. ถู(า เป้1น nullable จะได้(

SELECT(<A> --> ) = FIRST() FOLLOW(<A>)

Page 50: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSSELECTION SETS

ถู(า p เป้1นห้มายเลืข ของproduction เราจะใชื่(SELECT(p) แทนSELECT(<A> --> )

ซึ่&�งจะเห้ม�อนก�บคื*าจ*าก�ด้คืวามของ SELECT จากตอนท��แลื(ว

Page 51: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSFIRST SETS

ให้( context – free grammar แลืะintermediate string ของ symbols

จาก grammar เราจะก*าห้นด้ให้( FIRST() เป้1น set

ของ terminal symbols ท��เกด้ข&$นตรง ต*าแห้น)งเร�มต(นของ intermediate

strings ท�� derive มาจาก

Page 52: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSFIRST SETS

ข�$นตอนการห้า FIRST 1. ถู(า righthand side ของ

production เร�มต(นด้(วย terminalFIRST SET ของ production ก+คื�อ

terminal ต�วเร�มต(น ของ righthand side ของ production น��นเอง

2. ถู(า righthand side ของ production เป้1น null

FIRST SET ของ production จะเป้1น set ว)าง

Page 53: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSFIRST SETS

ข�$นตอนการห้า FIRST 3. ถู(า righthand side ของ

production เร�มต(นด้(วย nonterminalFIRST SET จะเป้1น terminal ต�วแรก

ท��ได้(จากการ derive nonterminal ต�วน�$น แต) ถู(า nonterminal derive ได้( null จะต(องพจารณ์า symbol ต�วถู�ด้ไป้ด้(วย

Page 54: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSFIRST SETS

จากการห้า FIRST สร�ป้ได้(ด้�งน�$ ก*าห้นด้ให้( production p ม�ด้(านซึ่(ายเป้1น<A> แลืะด้(านขวาเป้1น เราทราบว)าถู(า b อย0)

ใน FIRST() sequence ท��เร�มต(นด้(วย b สามารถูสร(างได้( <A> โด้ย first applying

production p ด้�งน�$น b จ&งต(องรวมอย0)ในselection set ส*าห้ร�บ p ในทางตรงก�นข(าม

ถู(า b ไม)ได้(อย0)ใน FIRST() จะไม)ม� sequence ท��เร�มต(นด้(วย b ท��ถู0กสร(างมาจาก production

p เลืย

Page 55: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSFIRST SETS

การห้า FIRST ท*าให้(เราทราบว)า sequence ท�� derive มาจาก production สามารถูเร�มต(นด้(วย terminal ต�วใด้บ(าง

สร�ป้

Page 56: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARSFOLLOWการห้า FOLLOW ใชื่(ก�บ production

ท�� derive ได้( nullconcept ท��เก��ยวข(องก�บ production ท�� derive แลื(วได้( null

ถู(า * string ของ symbol จาก grammar

จะเร�ยกว)า nullable string แลืะ production จาก grammar

จะถู0กเร�ยกว)า nullable production ถู(า ด้(านขวาของ production น�$นเป้1น

nullable

Page 57: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

Translation grammar ท��มี� input grammar เป็�น LL(1) grammar

production ท��ม�ร0ป้แบบเป้1น

เม��อ คื�อ string ของ action symbols

แลืะ คื�อ ห้ร�อ string ท��เร�ม ต(นด้(วย nonterminal

transition ท�� apply production น�$ จะเป้1น

Page 58: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

ต้�วอยู่"�ง พิ%จ�รัณ� grammar ต้"อไป็น��1 . <S> { x }

<A> { y }2 . <S> a{ y }3. <A> { z }

4 . <A> b <S> { z } c <A>

Page 59: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

ก�รัสำรั��ง Pushdown machine1. Column : input symbol ห�ไดั�จ�ก selection sets

1.1 Production ท�� righthand side เร�มต(นด้(วย terminal ห้ร�อ nonterminal ห้าได้(จาก FIRST set ของ

righthandside

SELECT(2) = FIRST(a) = { a }SELECT(4) = FIRST(b <S> c

<A>) = { b }

Page 60: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

ก�รัสำรั��ง Pushdown machine1. Column : input symbol ห�ไดั�จ�ก selection sets

1.2 Production ท�� righthand side เร�มต(นด้(วย action symbol ห้าได้(จากFIRST set ของ righthandside ย0เน�ยนก�บ FOLLOW set ของ lefthandside(ห้าเห้ม�อน nullable production)SELECT(1) = FIRST(<A>) FOLLOW(<S>)

= { b } { c, --| } = { b, c, --| }SELECT(3) = FIRST( ) FOLLOW(<A>)

= { } { c, --| } = { c, --| }

Page 61: บทที่ 8  :  Top-Down Processing

8.6 LL(1) GRAMMARS8.6 LL(1) GRAMMARS

สร�ป้ ได้( input set = { a, b, c, --| }

2. Row : stack symbol ไดั�แก" bottom marker และ symbol ท,กต้�วท��ไมี"ใช่"ต้�วเรั%�มีต้�นใน righthade side ของ production

stack symbols = { , <A>, {y}, <S>, {z}, c }

Page 62: บทที่ 8  :  Top-Down Processing

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

การห้า selection set จาก grammar ท��ให้(มาท*าให้(

สามารถูตรวจสอบ grammar ว)าเป้1นLL(1) grammar ใชื่)ห้ร�อไม) ซึ่&�งถู(าใชื่)ก+

สามารถูน*าไป้สร(าง top – down pushdown recognizer ได้( ซึ่&�งสามารถูด้0

ได้(จาก selection set ของ production ท�� eeeeeeee eeee เห้ม�อนก�นจะต(องเป้1น selection set ท��ไม)ต)อเน��อง(disjoint selection set)

Page 63: บทที่ 8  :  Top-Down Processing

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

ข��นต้อนก�รัห� selection sets1 . ห้า nullable nonterminals แลืะnullable productions2 . สร(างคืวามส�มพ�นธี� BEGINS – DIRECTLY – WITH3 . คื*านวณ์ห้าคืวามส�มพ�นธี� BEGINS – WITH4 . คื*านวณ์ห้า FIRST set ส*าห้ร�บแต)ลืะnonterminal5 . คื*านวณ์ห้า FIRST set ส*าห้ร�บแต)ลืะproduction6 . สร(างคืวามส�มพ�นธี� IS – FOLLOWED – DIRECTLY – BY

Page 64: บทที่ 8  :  Top-Down Processing

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

ข��นต้อนก�รัห� selection sets7 . สร(างคืวามส�มพ�นธี� IS – DIRECT – END – OF8 . คื*านวณ์ห้าคืวามส�มพ�นธี� IS – END - OF 9 . คื*านวณ์ห้าคืวามส�มพ�นธี� IS – FOLLOWED – BY10 . Extend IS – FOLLOWED – BY

เพ��อรวม endmarker11 . คื*านวณ์ห้า FOLLOW set ส*าห้ร�บ

แต)ลืะ nullable nonterminal12 . คื*านวณ์ห้า selection sets

Page 65: บทที่ 8  :  Top-Down Processing

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

ข��นต้อนท�� 1 1.1 จาก grammar ท��ให้(มา, delete production ท�กต�วท��ม� terminal symbol อย0)ทางด้(านขวา( โด้ยจะไม) delete -productions เน��องจาก ไม)ใชื่)terminal symbol)

1.2 nonterminal ท�� derive ได้( เร�ยกว)า alive nonterminal

ห้ร�อ nullable nonterminal 1.3 production ท��ม� alive

nonterminal เป้1น nullable production

Page 66: บทที่ 8  :  Top-Down Processing

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

ต้�วอยู่"�ง พิ%จ�รัณ� grammar ต้"อไป็น��1. <S> <A> <B>2. <S> b <C>3. <A> 4. <A> b5. <B> 6. <B> a <D>7. <C> <A> <D>8. <C> b9. <D> a <S>10.<D> c

Page 67: บทที่ 8  :  Top-Down Processing

เม��อท*าการ delete production ท��ม� terminal symbol แลื(วจะได้( grammar ด้�งต)อไป้น�$ 1. <S> <A> <B> 3. <A> 5. <B> 7. <C> <A> <D>

Nullable nonterminal ได้(แก) <A> แลืะ <B>Nullable production ได้(แก) production 1, 3 แลืะ 5

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 68: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 2 การสร(างคืวามส�มพ�นธี�ท��เร�ยกว)า BEGINS –

DIRECTLY – WITH ถู(า A แลืะ B เป้1น symbols ท��อย0)ใน grammar ท��ก*าห้นด้ให้( เราจะได้(ว)า

A BEGINS - DIRECTLY- WITH B

ถู(าม� production ท��ม�ร0ป้แบบเป้1น

เม��อ คื�อ nullable string แลืะ เป้1น arbitraty string

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 69: บทที่ 8  :  Top-Down Processing

ต้�วอยู่"�ง<A> <V> <X> <Y>

<Z> ท*าให้(อย0)ในร0ป้ ได้(โด้ยให้(

A = <A>, = , B = <V> , = <X> <Y> <Z> จะได้(

<A> BEGINS – DIRECTLY – WITH <V> ถู(า <V> เป้1น nullable เราก+จะได้(

<A> BEGINS – DIRECTLY – WITH <X>

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 70: บทที่ 8  :  Top-Down Processing

เราจะสร(าง matrix เพ��อ represent BEGINS – DIRECTLY – WITH ส*าห้ร�บ grammar ต)อไป้น�$ซึ่&�งเร�มต(นด้(วย nonterminal <A>

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 71: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 3 การคื*านวณ์คืวามส�มพ�นธี� BEGINS – WITH

ถู(า A แลืะ B เป้1น symbols ใน grammar ท��ให้(มา เราจะได้(ว)า <A> BEGINS – WITH Bถู(าม� string ท��ข&$นต(นด้(วย B ท�� derive มาจาก A

คืวามส�มพ�นธี� BEGINS – WITH เป้1น reflexive transitive closure ของคืวามส�มพ�นธี� BEGINS – DIRECTLY – WITH

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 72: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 4 การคื*านวณ์ FIRST(<A>) ส*าห้ร�บแต)ลืะ

nonterminal <A>ถู(า <A> BEGINS – WITH b

จะได้(ว)า set ของ FIRST(<A>) เป้1น set ของ terminal b

ท�$งห้มด้ พจารณ์า ส)วน column ท��แสด้งถู&ง

terminal ใน matrix โด้ยด้0ส)วนท��ท*าส�ญลื�กษณ์�ใน matrix

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 73: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 5 การคื*านวณ์ FIRST ส*าห้ร�บด้(านขวาของ

แต)ลืะ production โด้ยใชื่(ข(อม0ลืท��ได้(จาก ข�$นตอนท�� 4

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 74: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 6 การสร(างคืวามส�มพ�นธี�ท��เร�ยกว)า IS – FOLLOWED – DIRECTLY –

BY ซึ่&�งคืวามส�มพ�นธี�น�$อธีบายได้(ด้�งน�$เราจะเข�ยน A IS-FOLLOWED-

DIRECTLY-BY Bถู(าม� production ท��อย0)ในร0ป้ D

A B เม��อ A แลืะ B เป้1น symbol, เป้1น

nullable string แลืะ ก�บ เป้1น arbitrary strings

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 75: บทที่ 8  :  Top-Down Processing

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETSสมม�ต ให้( = b, A = <C>, = <D>, B = <E>, แลืะ = จะได้( production <D>b<C><D><E>ท*าให้(เกด้ การรวมก�น 4 คื0) ได้(แก) b IS-FOLLOWED-DIRECTLY-BY <C>

<C> IS-FOLLOWED-DIRECTLY-BY <D>

<D> IS-FOLLOWED-DIRECTLY-BY <E>

<C> IS-FOLLOWED-DIRECTLY-BY <E>

Page 76: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 7 การสร(างคืวามส�มพ�นธี� IS –

DIRECT – END – OFถู(า A แลืะ B เป้1น symbols ท��อย0)ใน

grammar ท��ให้(มา เราจะได้(ว)า

A IS – DIRECT – END – OF Bถู(าม� 1 production ท��อย0)ในร0ป้

B A เม��อ เป้1น nullable string แลืะ เป้1น arbitrary string

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 77: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 8 การคื*านวณ์คืวามส�มพ�นธี� IS-END-

OF ถู(า A แลืะ B เป้1น symbols ใน

grammar ท��ให้(มา เราจะได้(ว)า

A IS-END-OF Bเม��อม� string ท��ลืงท(ายด้(วย A ท��

สามารถู derive จาก B ได้(

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 78: บทที่ 8  :  Top-Down Processing

คืวามส�มพ�นธี� IS-END-OF เป้1น reflexive transitive closure ของ IS – DIRECT – END – OF ด้(วยเห้ต�ผ่ลืเชื่)นเด้�ยวก�บท�� BEGINS – WITH เป้1น reflexive transitive closure ของ BEGINS – DIRECTLY – WITH

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 79: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 9 เป้1นการคื*านวณ์คืวามส�มพ�นธี�ท��เร�ยกว)าIS – FOLLOWED – BY ซึ่&�งแสด้งได้(ด้�งน�$

ถู(าม� string ท��สามารถู derive จาก <S> ซึ่&�งม�เห้ต�การณ์�ท�� symbol A followed by symbol B.

ถู(า A แลืะ B เป้1น symbol ท��A IS-FOLLOWED-BY B

ด้�งน�$น จะม� symbol X แลืะ Y ท��A IS-END-OF X IS-FOLLOWED-DIRECTLY-BY Y BEGINS-WITH B

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 80: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 10 การเพ�ม column เข(าไป้ใน IS –

FOLLOWED – BY matrix ท��คื*านวณ์ในข�$นตอนท�� 9 โด้ยใชื่( endmarker เป้1นชื่��อของ column น�$

ข��นต้อนท�� 11 การคื*านวณ์ FOLLOW set ส*าห้ร�บแต)ลืะ

nullable nonterminal

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 81: บทที่ 8  :  Top-Down Processing

ข��นต้อนท�� 12 การคื*านวณ์ selection set ซึ่&�งขณ์ะน�$ได้(มาจากการ

คื*านวณ์คื)าของ FIRST แลืะ FOLLOW

8.7 FINDING SELECTION 8.7 FINDING SELECTION SETSSETS

Page 82: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

Pushdown recognizer เม��อ detect เจอก�บinput sequence ท��เป้1น nonsentence ในคืร�$งแรก

แลื(วจะท*าการ REJECT entry ลืงไป้ใน control table ตรงจ�ด้น�$ compiler จะท*าการต� message error

ออกมาเพ��ออธีบายให้( programmer ทราบว)าท*าอะไรผ่ด้ พลืาด้บ(าง นอกจากน�$ compiler ย�งป้ร�บป้ร�งแก(ไข

configuration ของ pushdown machine จ&งท*าให้( กระบวนการร�บ input sequence ด้*าเนนต)อไป้ได้( แลืะ

ถู(าห้ากเห้มาะสมก+จะท*าการสร(าง additional message ข&$นมาด้(วย กระบวนการน�$เราเร�ยกว)า error recovery

Page 83: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

Offending Symbol คื�อ input ต�วป้;จจ�บ�นท��ถู0ก REJECT ออกมา

Top-down recognizer ม�คื�ณ์สมบ�ต พเศ์ษท��เร�ยกว)า Prefix property ท��ชื่)วยในการ

สร(าง error message

Page 84: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

เราสามารถูพ0ด้ได้(ว)า pushdown recognizer ม� prefix property น�$ได้(ก+ต)อเม��อ

ลื*าด้�บทางซึ่(ายม�อของ offending symbol จะ เป้1น prefix ของ input string ท��เคืร��องยอมร�บ

(accept)

Page 85: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

ในการสร(าง error message ท��เห้มาะสมน�$นcompiler จะวเคืราะห้�จาก input string แลืะข(อคืวาม

ของ stack ในเวลืาท��ม�การ reject แลืะ error message จะเกด้บน top stack symbol แลืะก�บinput ต�วป้;จจ�บ�น โด้ยท�� top stack symbol เป้1นการ

บอกว)า compiler ก*าลื�งห้าอะไร แลืะ input ต�วป้;จจ�บ�น เป้1นต�วบอกว)าเจออะไร ด้�งน�$นจะได้(ร0ป้แบบของ

message เป้1น“I WAS LOOKING FOR (BEGINNING

OF) A ____. BUT INSTEAD I FOUND A ____.”

Top stack symbolInput

symbol

Page 86: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

ต�วอย)างการออกแบบ error message ท��ใชื่(ใน S-exgrammar

1. <S> a2. <S> ( <S> <R>3. <S> , <S> <R>4. <S> )

Starting stack คื�อ <S>

Page 87: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

Grammar น�$ก)อให้(เกด้ (generate) เป้1น LISP-like expressions ได้(ด้�งน�$ a (a, (a, a ) ) ( (a, (a, a), (a, a) ), a)

สมมตให้( expression น�$เร�ยกว)า S-expressions เชื่)นก�น

Page 88: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

<S><R>

, ( ) -|a

#1

#4#3

#2REJECT

a

ACCEPT

REJECT

b

REJECT

cREJECT

d

REJECT

e

REJECT

fREJECT

g

REJECT

h

REJECT

i

REJECT

jStarting stack: <S>

Page 89: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

#1 POP,ADVANCE#2 REPLACE(<R><S>), ADVANCE#3 REPLACE(<R><S>), ADVANCE#4 POP,ADVANCE

Page 90: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

สร�ป้การเลื�อก message error ท��เห้มาะสมก�บแต)ลืะ REJECT entry คื�อ

a, b : ____OCCURS WHEN S-EXPRESSION EXPECTED

c : S-EXPRESSION INCOMPLETEd, e : MISSING RIGHT

PARENTHESISg, h, i, j : ____OCCURS AFTER END

OF S-EXPRESSION

Page 91: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

เราแบ)งการท*า error recovery ออกเป้1น 2ส)วน คื�อ

Local

Global

Page 92: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

<S><R>

, ( ) -|a

#1

#4#3

#2a

ACCEPT

b c

d e f

g h i j

Starting stack: <S>

Page 93: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

# 1 : POP, ADVANCE# 2 : REPLACE(<R><S>), ADVANCE# 3 : REPLACE(<R><S>), ADVANCE# 4 : POP, ADVANCEa, b : PRINT ( ____ OCCURS WHEN S-EXPRESSION EXPECTED ) POP, RETAIN c : PRINT ( S-EXPRESSION INCOMPLETE ) EXITd, e : PRINT ( MISSING COMMAR ) REPLACE(<R><S>), RETAIN f : PRINT ( MISSING RIGHT PARENTHESIS ) EXITg, i : PRINT ( ____ OCCURS AFTER END OF S-EXPRESSION ) PUSH (<R><S>), RETAIN h : PRINT ( ____ OCCURS AFTER END OF S-EXPRESSION ) PUSH (<R>), RETAIN j : PRINT ( ____ OCCURS AFTER END OF S-EXPRESSION ) ADVANCE

Page 94: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

<S> ( a , , a -|<R> <S> a , , a -|<R> , , a -|<R> <S> , a -|PRINT (4, “COMMA OCCURS WHEN S-

EXPRESSION EXPECTED”)<R> , a -|<R> <S> a -|<R> -|PRINT(6, “MISSING RIGHT PARENTHESIS”)

EXIT

Page 95: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing( a , , a

COMMA OCCURS WHEN S-EXPRESSION EXPECTED

( a , , a

MISSING RIGHT PARENTHESIS

Page 96: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

Synchronizing SymbolsSynchronizing symbol เป้1นส�งท��ผ่0(

ออกแบบม��นใจว)าจะต(องท*าอย)างไรในการrestart process set ของ synchronizing symbol ส*าห้ร�บภาษาน�$จะป้ระกอบด้(วย

เคืร��องห้มายวรรคืตอน เชื่)น comma (“,”) แลืะ semicolon (“;”) แลืะ ป้ระกอบด้(วยคื*า

สงวนต)างๆ เชื่)น END ห้ร�อ THEN

Page 97: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN ParsingBeginning SymbolsBeginning symbol ไม)ได้(ห้มายคืวามว)า

เป้1นการเร�มต(นท*า process ให้ม) แต)เป้1นต�วท��บอก ให้(ก�บน�กออกแบบว)าย�งม� nonterminals ห้ร�อ

terminals ต�วถู�ด้ไป้อ�ก

Page 98: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

ต�วอย)าง สมมตว)า S-expression grammar เป้1นส)วนห้น&�งของ grammar ท�$งห้มด้ท�� ไม)ได้(ใชื่(วงเลื+บในข(อคืวามต)างๆ

ระห้ว)างการท*า error recovery ถู(าห้ากต�ว scanning routine เจอ “เคืร��องห้มาย (” เราก+

“สามารถูท*านายได้(ว)า เคืร��องห้มาย (“ เป้1นต�วเร�ม ต(นของ <S> procedure ของการ recovery

ก+จะเป้1นPUSH({ERROR} <S>)

Page 99: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

เราจะให้(คืวามส*าคื�ญก�บ Global recovery procedure ซึ่&�งจะม� set ของ synchronizing

แลืะ beginning symbols ท��ต(องพจารณ์าร)วม ก�น กลื)าวคื�อถู(าเป้1น contain symbol ก+จะใชื่( เป้1น

synchronizing symbol แต) ถู(าเป้1น specific symbol ก+จะสามารถูใชื่(เป้1น beginning symbol

Page 100: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.8 Error Processing in 8.8 Error Processing in TOP-DOWN ParsingTOP-DOWN Parsing

ต�วอย)างเชื่)น ใน S-expression grammar ถู(า error-recovery scheme ม�พ�$นฐานอย0)

“เพ�ยงแคื)การใชื่(เคืร��องห้มาย ,” แลืะ เคืร��องวงเลื+บ “ป้Aด้ )” ซึ่&�งจะเห้ม�อนก�บ synchronizing

symbol ไม)สามารถูใชื่(งานต)อไป้ได้( เน��องจากว)าต�วscanning routine จะท*าการ scan ผ่)าน

“เคืร��องห้มาย (” “เพ��อมองห้าเคืร��องห้มาย ,” ส)ง ผ่ลืให้(การน�บวงเลื+บไม)ถู0กต(อง อย)างไรก+ตาม เราจะ

ให้( “เคืร��องห้มาย (” ถู0กพจารณ์าก+แลืะ ให้(เป้1นbeginning symbol จ&งท*าให้(การรวมก�นของbeginning symbol แลืะ synchronizing symbol เป้1นท��น)าพอใจ

Page 101: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

แนวคืวามคืด้พ�$นฐานของ recursive descent น�$คื�อแต)ลืะ nonterminal ของgrammar ม� procedure ท��สอด้คืลื(องก�น ซึ่&�งจะ

จ*าแบบของ nonterminal น�$นๆ procedure น�$ จะถู0กเร�ยกแต)ลืะคืร�$งตามคืวามเห้มาะสม กลืไกการ

ท*า Stacking ของ pushdown machine จะ ถู0กแทนท��ด้(วย กลืไกprocedure-calling ของ

ภาษาระด้�บส0ง

Page 102: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

ต้�วอยู่"�ง พจารณ์าตาม Q-grammar ท��ม�starting nonterinal คื�อ <S>

1. <S> a <A> <S>2. <S> b3. <A> c <A> <S>4. <A> E

Page 103: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

ขบวนการส*าห้ร�บ recognizing ท��สร(างภาษาโด้ยgrammar จะได้(

Main Program“Start of Program”let INP = first input symbolcall PROCSif INP = -| then REJECTACCEPT

Page 104: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

Procedure PROCSGo to

a P1

b P2

c REJECT

d REJECT

Page 105: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

P1 : “Code for Production 1”Call ADVANCECall PROCACall PROCSReturn

P2 : “Code for Production 2”Call ADVANCEReturn

Page 106: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

Procedure PROCA

Goto a P4

b P4

c P3

d REJECT

Page 107: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

P3 : “Code for Production 3”Call ADVANCECall PROCACall PROCSIf INP = bThen REJECTCall ADVANCEReturn

P4 : “Code for Production 4”Return

Page 108: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

Production ให้ม)คื�อ1. <S> a <A> {x} <S>2. <S> b {z}3. <A> c {y} <A> <S> {v} b4. <A> {w}

Page 109: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescentMain Program

“Start of Program”let INP = first input symbolcall PROCSif INP = -| then REJECTACCEPT

Page 110: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

Procedure PROCSGo to

a P1

b P2

c REJECT

d REJECT

Page 111: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

P1 : “Code for Production 1”Call ADVANCECall PROCACall OUT(x)Call PROCSReturn

P2 : “Code for Production 2”Call ADVANCECall OUT(z)Return

Page 112: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

Procedure PROCA

Goto a P4

b P4

c P3

d REJECT

Page 113: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

P3 : “Code for Production 3”Call ADVANCECall OUT(y)Call PROCACall PROCSCall OUT(v)If INP = bThen REJECTCall ADVANCEReturn

P4 : “Code for Production 4”Call OUT(w)Return

Page 114: บทที่ 8  :  Top-Down Processing

8.3 S-GRAMMARS8.9 Method of recursive 8.9 Method of recursive descentdescent

Operation ส*าห้ร�บ symbol ห้ลืายๆชื่นด้ จะเกด้ข&$น ทางด้(านขวาของ production ของ string

translation grammar ด้�งน�$1. ส*าห้ร�บ action symbol operation

น�$นก+คื�อ OUT 2. ส*าห้ร�บ terminal ท��เป้1น nonaction

symbol ต�วแรกของ production operation จะเป้1นADVANCE

3. ส*าห้ร�บ terminals ต�วอ��นๆ operation จะ เป้1น test แลืะ ADVANCE

4. ส*าห้ร�บ nonterminals operation จะ เร�ยก procedure ท��สอด้คืลื(องก�น