Top Banner
ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis Elias Athanasopoulos [email protected]
21

ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

Mar 18, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

ΕΠΛ323-ΘεωρίακαιΠρακτικήΜεταγλωττιστών

Lecture7aSyntaxAnalysisEliasAthanasopoulos

[email protected]

Page 2: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

Operator-precedenceParsing

• Aclassofshift-reduceparsersthatcanbewrittenbyhand

• Noε-productions,notwoadjacentnon-terminalsontherightside

E èEAE|(E)|-E|idE è+|-|*|/|^

OperatorGrammarE èE+E|E-E|E*E|E/E|E^E|(E)|-E|id

x

Page 3: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

OperationRelationTableRELATION MEANING

α <·β α “yieldsprecedenceto”β

α =β α “hasthesameprecedence”β

α ·> β α “takesprecedenceover”β

·

id + * $

id ·> ·> ·>

+ <· ·> <· ·>

* <· ·> ·> ·>

$ <· <· <·

E èE+E|E*E|id

Page 4: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

ExampleSTACK INPUT ACTION

$ id+id*id$ shift (push)

$id +id*id$ reduce (pop)

$ +id*id$ shift (push)

$+ id*id$ shift (push)

$+id *id$ reduce (pop)

$+* id$ shift (push)

$+*id $ shift (push)

$+* $ reduce (pop)

$+ $ reduce (pop)

$ $ reduce (pop)

id + * $

id ·> ·> ·>

+ <· ·> <· ·>

* <· ·> ·> ·>

$ <· <· <·

stack <· input: shift (push)stack ·> input: reduce (pop)

Page 5: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

CompressionofParsingTable

gid

f*

g+

f$

fid

g*

f+

g$

f \ g id + * $

id ·> ·> ·>

+ <· ·> <· ·>

* <· ·> ·> ·>

$ <· <· <·

+ * id $

f 2 4 4 0

g 1 3 5 0

Page 6: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

LR(k)parsers

Left-to-rightscanningoftheinput.

Constructionofarightmostderivationinreverse

Numberofsymbolsfortakingadecision(lookahead).

Page 7: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

LRparsers• LRparserscanbeconstructedtorecognizevirtuallyallprogramming-languageconstructsforwhichcontext-freegrammarscanbewritten.

• TheLRparsingmethodisthemostgeneralnonbacktracking shift-reduceparsingmethodknown,yetitcanbeimplementedasefficientlyasothershift-reducemethods.

• TheclassofgrammarsthatcanbeparsedusingLRmethodsisapropersupersetoftheclassofgrammarsthatcanbeparsedwithpredictiveparsers(e.g.,LL(1)).

• AnLRparsercandetectasyntacticerrorassoonasitispossibletodosoonaleft-to-rightscanoftheinput.

Page 8: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

RecallLL(1)

PredictiveParsingProgramX

Y

Z

$

STACK

ParsingTableM

a + b $INPUT

OUTPUT

$:endsymbolX,Y,Z:non-terminalsorterminals

Page 9: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

parsingtable

LRparser

LRParsingProgramsm

STACK

actions

… ai … $INPUT

OUTPUT

a1 an

s0

Sm-1

Xm-1

...

Xm

goto

Algorithm(foraction[sm,ai])1.shifts,wheres isstate2.reducebyagrammarproduction3.accept,and4.error.

Page 10: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

LRParsers

LR(0) LALR(1)(LookAheadLR)

SLR(1)(SimpleLR)

CLR(1)(CanonicalLR)

Power

Simplicity

Page 11: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

ConstructinganSLRparsingtable

Page 12: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

LR(0)item

A èXYZ

A è·XYZA èX·YZA èXY·ZA èXYZ·

A èε

A è·

fouritems

WehopetoseeastringderivablefromXYZ nextontheinput.

WehavejustseenontheinputastringderivablefromXandthatwehopenexttoseeastringderivablefromYZ.

Wesawallinput.

Page 13: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

Closure

IfI isasetofitemsforagrammarG,thenclosure(I)isthesetofitemsconstructedfromI bythetworules:• Initially,everyiteminI isaddedtotheclosure(I).• IfAèa·Bb isinclosure(I)andBèC isaproduction,thenaddtheitemBè·C toI,ifitisnotalreadythere.Weapplythisruleuntilnomorenewitemscanbeaddedtoclosure(I).

Page 14: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

Example

GrammarE’àEE àE+T|TT àT*F|FF à(E)|id

I = {[E’à·E]}closure(I)E’à·EE à·E+TE à·TT à·T*FT à·FF à·(E)F à·id

Page 15: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

Goto

goto(I,X)isdefinedtobetheclosure ofthesetofallitems[AàαX·β]suchthat[Aàα·Xβ]isinI.

I = {[E’àE·], [EàE·+T]}goto(I,+)E àE+·TT à·T*FT à·FF à·(E)F à·id

GrammarE’àEE àE+T|TT àT*F|FF à(E)|id

Howgoto(I,+)iscomputed?Wecomputedgoto(I,+)byexaminingI foritemswith+immediatelytotherightofthedot.E’àE· isnotsuchanitem,but EàE·+T is.Wemovedthedotoverthe+toget{EàE+·T} andthentooktheclosureofthisset.

Page 16: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

CanonicalcollectionofLR(0)items• Augmentthegrammarwithanewsymbolthatproducesthestartingsymbolofthegrammar:S’àS

• Computetheclosureofthenewproduction,C:=closure({[S’à·S]})

• ForeachsetofitemsI inC,andeachgrammarsymbolX,addgoto(I,X)toC

Page 17: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

I0E’à·EE à·E+TE à·TT à·T*FT à·FF à·(E)F à·id

I1E’àE·E àE·+T

I2E àT·T àT·*F

I3T àF·

I4F à(·E)E à·E+TE à·TT à·T*FT à·FF à·(E)F à·id

I5F àid·

I6E àE+·TT à·T*FT à·FT à·(E)T à·id

I7T àT*·FF à·(E)F à·id

I8F à(E·)E àE·+T

I9E àE+T·T àT·+F

I10T àT*F·

I11F à(E)·

CanonicalcollectionofLR(0)items

Page 18: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

TransitionDiagram

I1I0E

I6+

I9Τ

I2

Τ

I3F

I4(

I5id

I7

I8E I11

)

id

I10F

(id toI4

toI5

* toI7

toI3toI4

toI5

F(id

*

( F

TtoI2

toI6+

Page 19: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

SLRParsingTableSTATE

action goto

id + * ( ) $ E T F

0 s5 s4 1 2 3

1 s6 acc

2 r2 s7 r2 r2

3 r4 r4 r4 r4

4 s5 s4 8 2 3

5 r6 r6 r6 r6

6 s5 s4 9 3

7 s5 s4 10

8 s6 s11

9 r1 s7 r1 r1

10 r3 r3 r3 r3

11 r5 r5 r5 r5

Page 20: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

ParsingAlgorithmset ip to point the first symbol of w$;repeat forever begin

let s be the state on top of the stack and a the symbol pointed to by ip;if (action[s, a] = shift s’ then begin

push a then s’ on top of the stack;advance ip to the next input symbol

endelse if action[s, a] = reduce Aàb then begin

pop 2x|b| symbols off the stack;let s’ be the state now on top of the stack;push A then goto[s’, A] on top of the stack;

output the production Aàbendelse if action[s, a] = accept then

returnelse error()

end

Page 21: ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών · ΕΠΛ323 - Θεωρία και Πρακτική Μεταγλωττιστών Lecture 7a Syntax Analysis

id*id+idSTACK INPUT ACTION

(1)0 id*id+id$ shift

(2)0id 5 *id+id$ reduce by Fàid

(3)0F 3 *id+id$ reduce byTàF

(4)0 T 2 *id+id$ shift

(5)0 T 2*7 id+id$ shift

(6)0 T 2*7id 5 +id$ reduce byFàid

(7)0T 2*7F 10 +id$ reduce byTàT*F

(8) 0T 2 +id$ reduce byEàT

(9)0E 1 +id$ shift

(10)0E 1+6 id$ shift

(11)0 E 1+6id 5 $ reduce byFàid

(12)0 E 1+6F 3 $ reduce byTàF

(13)0 E 1+6T 9 $ EàE+T

(14)0E 1 $ accept

Productions(1) E àE+T(2) E àT(3) T àT*F(4) T àF(5) F à(E)(6) F àid