Vous êtes sur la page 1sur 62

|  



Goal  rightmost derivation 


reverse 
    
 
     

 

 

Observation 
  

  
 
  
  
   
  


LR parsing
  left to right  

 
rightmost derivation in reverse
  
!  "  
   #handle$

 
   
   
    
 
    
%
 

 
   


   
#  &valid prefixes$'  

  ð    


 #  ðð
ð$

Ñ D  D  D 


Ñ

 
" 
Œ"
(
  
       

     
 
 
  
àrod'n Sentential Handle*
  
 ÷  Form
   *+
)
#**$  *    +,
     o
+   ,*

,  
 -,

- 

 
 
      

    

  
       ÷   
  
è 

)     



     

     
. 

  %/
.   %
 
  
  
  
Ñ
 
handle

! 
. handle  
    
  K  þ  

    þ   
ºonvention
 
  
    

. 0#K /þ$
    þ  
   
K  
  
 
      

   
è 

àrovable fact:


      

  
 


àroof:
!  
    

    


ºorollary
    
   
  
  
Ñ  

Ñ 
 
        

 
shift-reduce parser.
Ñ  


stack   input buffer
- 0   &
 1
+     

 
 
    
 
a) find the handle
 2    
shift   

   

 prune the handle
 #K  þ $   
reduce
$ 3þ 3
 
 

$
K  

Ñ  

Ñ 
(     
 

#


 
 

    


$

o
Ñ  â â 

     



 
 
Œ"
4 
" 

 
. Œ"44#-$  
   ÷      ÷  

     


       
      
   
       
     
  
  !"
#  $
   %
Ñ    
  
´ Ô Ô none  
´ Ô §    §
´ ·    Ô ë    ë
´ ·  Ô A    A
´   Ô none  
´   Ô none  
´    Ô w    w
´   ·    Ô ë    ë
´ · ·  Ô none  
´     Ô none  
´     §    §
´   · ·        
´ ·  ·      
´ ·      
´   none   

- Ñ     

    
+ !      

5
 
67 
6-
O   "
%viable prefix

-   "  


     
 
  
    

  
    
+   "  
      

 
  
 
0



   
   
   "    
    
%
 
  "  
 


 
 
 
  

If the grammar is unambiguous, there is a unique


rightmost handle.
LR(k) grammars are unambiguous.
Ñ  

Ñ 
8 
   
 
 
  



.    
#  


  % 
Ñ  +9*$
. 4#-$ 

 4#-$ 


4#-$ 
#Ñ4#-$$
 4#-$ 
#4%4#-$$
8 

    
 
 : ":
    
4#-$Ñ4#-$ 4%4#-$$ 

finite
automata #;!%
 <!%
$   &   "

 
 : ":   
 #$ 

0  
  

 #$    
 
Ñ  9D -D +D  D   
   
     
  
-
   
   
 
+        

      


 
    
   
  4


%  4#$
  
 





Ñ   
 
 
       



% =
 


Ñ         

)
4#-$ 
o
%context-free, deterministic languages  
4#-$    4 

 
  

   
  &44
#   $


4 
 
    
 

   
  

Π  
  

    
4#-$ 

.          
6 

Œ
  

    
4

  




 
  
   
Π 2
 
 #Π$  
 
 #"$
4#-$


 
 
& !  !  & !'(
    ) 
*    *&
$ $!+*,& !-  .   ./ 0 !
"*0 & !
"*0
& !  !  & !'(
* $ $!+*,& !- 
. K  þ. 0 !
  *þ* *% *
*    *&
"*0
"*0 +*,K-
* $ $!+*, & !-  .÷
. 0 !
 "!
* '(



 
 
 - 
 
 
  
   
 

  
Œ   !  ,*9% Ñ  
4#9$

Ñ    
  
´ Ô Ô none  
´ Ô §    §
´ ·    Ô ë    ë
´ ·  Ô A    A
´   Ô none  
´   Ô none  
´    Ô w    w
´   ·    Ô ë    ë
´ · ·  Ô none  
´     Ô none  
´     §    §
´   · ·        
´ ·  ·      
´ ·      
´   none   

áheorem: A language  has an LR(0) grammar iff


.  is deterministic
. no proper prefix of a word in  is in  (prefix property)
4

     
 
  
  :4:
 
 . SLR( ) = LR(0) + FOLLOW




  




#   

$



 
2. LR( )

 4#-$ 

 

#   

$

  
 
3. LALR( )
  
&
  


   


Ñ4#-$
 
  

   
 
   
"


K    K KÑK        Ñ  
K    
  
   
Ñ4#-$

O   "  
    
.  
   
    

.    & <!%

|  Ñ4

. 
 <!%   &    "

.    !44) 
 

Ñ
 ;!% 4#9$ 

Ñ
 <!% 

 4#9$ 
#


  $

; % :    :


  
 
 
  
   
!  
 4
 

  

     Ñ>/Ñ
4#9$ 

% LR(0) item

 ? š 

   8 ß 

   

. ß  
    
   
 

 


. ?K /ß â š  

 
   
  
  â 
. ?K /â ß š  

 

 
   â
 
      

LR(0) Items # ÷÷$


K /â    
,4#9$ 

- ?K  ß â š
+ ?K  â ß š
* ?K  â ß š
, ?K  â  ߚ
( 4#9$ 

Ñ4#-$
   


  

 

 4#9$ 




 canonical collection of sets
4#9$ 
   8
    
 

 


<!%  &
   "
Œ



  4#9$ 
     


4#9$ ?K /þ- ß þ+š
     "
þ-  
  
Ñ> @ K  þ-þ+

   
    
 
 
( (   4#9$ 

 
     
  

. closure()
?K / ß þš$ ÿ   
 
 
  "

   þ
   

  
  ? /
ßš$ 

. GOáO()
0ÿ

  
   

   " 8#ÿ â$

  

      "â
(
 #ÿ

 #ÿ$
8    ?K / ß þš 

  
     

     


   


 
 
   "  

 
 
 þ #   
   ? /ß š 
 $

  
 #0$
  
 #0$

A  

  ?K / ß þš$ ÿ    / $ 
? /ß šR ÿ 
? /ß š ÿ
A   
  
  # A /
$
 0
8  #ÿâ
#ÿâ$$
4ÿ 
 4#9$ 
 â   
 
 8#ÿâ$

  
  
?K /
â ß þš
?K / ß âþš$ ÿ
0ÿ

   
 
   "   #0B$


   
    "B
 #ÿâ$  
 

   & â 
ÿ

    #ÿâ$ 
    #0B$
C
  
?K / â ß þš
?K / ß âþš$ ÿ
C> 
 #C$
 C>
(   

 4#9$ 

)
 
      

 4#9$ 
  
?Ñ /ß Ñš 
Ñ

 
      >
Ñ

 
  
     

 4#9$ 

procedure items(G¶)
Ñ0  closure({[Ñ ::= ß Ñš )
Items  {Ñ0
áoDo  {Ñ0
while áoDo not empty do
remove Ñ from áoDo
for each grammar symbol  do
Ñ  goto(Ñ ,)
if Ñ is a new state then
Items  Items {Ñ
áoDo  áoDo {Ñ
endif
endfor
endwhile
return Items
4#9$ 

4#9$<!%


  

 4#9$ 

 
   


 &
   "

 
  #   $ 
    

-   
   
+   
      



áo return to the state at beginning of the


handle, we must use the stack to store the
state!
Ñ4#-$

SLR( ) parser
  4#9$ 
!44)   
     
  
%(0;8 

AºáION table
 ? ÷ ÷÷š
.     o
.  
 
.     
. 
 
. 
    

GOáO table
 ? ÷   ÷ š
.  
     
% 
- (
    

 4#9$ 

 
+ Ñ 
 

  ÿ 
$ ?K / ß þš$ ÿ    #ÿ $/ÿ  

%(0;? š :
  :#
  $
$ ?K / ß š$ ÿ  
%(0;? š : K /
:  !44)#K$
$ ?Ñ>/Ñ ßš$ ÿ  
%(0;?  š ::
* 0  #ÿ K$/ÿ  
8?  Kš  
, %    
 %(0;  8  

 : :
5   
 
 



  
   ?Ñ>
/ß Ñš
Ñ4#-$
 "
8 
- Œ / 6Œ
+ 3
*  / 

%  8 


9 Ñ> / Œ
- Œ / 6Œ
+ 3
*  / 

Ñ  !0Ñ !44)


Ñ> D E D E
ΠD E D E
 D E D6 E
Œ"4#9$


Ñ9 ?Ñ9 / ß Œš


?Œ/ß 6Œš
?Œ/ß š
?/ß š

Ñ-  ?Ñ9 /Œß š

Ñ+  ?Œ/ß 6Œš
?Œ/ß š

Ñ*  ?/ ß š

Ñ,  ?Œ/6ß Œš
?Œ/ß 6Œš
?Œ/ß š
?/ß š

Ñ5  ?Œ/6Œߚ
Œ"8 
Ñ÷
Ñ9  
 #D?Ñ/ ß ŒšE$
ÿ÷  
 #Ñ9Œ$/Ñ-
 #Ñ9$/Ñ+
 #Ñ9 $/Ñ*
ÿ÷  
 #Ñ+6$/Ñ,
ÿ÷  
 #Ñ, $/Ñ*
 #Ñ,Œ$/Ñ5
 #Ñ,$/Ñ+
<!%

Ñ>„ Œ
Ñ> /
Œ/
Œ
6Œ
Π-
Œ/
/


 6 Œ
Œ„ 6Œ
9 + , 5
 Œ/6 Œ
Œ/ 6Œ
 Œ/ Œ/ 6Œ
Œ/ 
/ 

„ 
*

|  Ñ4#-$Ñ 
Π 

 
Π 
  #    


   $ Ñu  
  
   Ñ
Ñ  
  
  Ñ
ÑA  
Ñ
Ñ>„ Œ
Ñ> /
Œ/
Œ
6Œ
Π-
Œ/
/


 + Œ
Œ„ 6Œ
9 + , 5
 Œ/6 Œ
Œ/ 6Œ
id Œ/ Œ/ 6Œ
Œ/ 
/ 

„ 
*
id
|  Ñ4#-$
Π 

% 
     
 
   
Ñu 
     Ñ 
    F Ñ A
Ñ
ÑA 
Ñ
Ñ>„ Œ
Ñ> /
Œ/
Œ
6Œ
Π- F  
Œ/
/


 6 Π 
o
Œ„ 6Œ
9 + , 5
 Œ/6 Œ
Œ/ 6Œ
 Œ/ Œ/ 6Œ
Œ/ 
/ 

„ 
*

Ñ4#-$Ñ 

0# "$6Œ
 
mse FOLLOW sets!

 "
  

   
Ñ> / Œ     Œ 
Œ / 6Œ
    
3  Œ
 / 

!44)#Ñ>$/D E
 Œ
!44)#Œ$/D E
!44)#$/D6 E


 6   
Lookahead
Π 

 
% 
   
  
       Ñu 
!44)#â$ â Ñ     Ñ E

     Ñ A    E T

   Ñ    T i    T i
ÑA 
Ñ    E T E
Ñ>„ Œ
Ñ> /
Œ/
Œ
6Œ
Π-
Œ/
/


 6 Œ
Œ„ 6Œ
9 + , 5
 Œ/6 Œ
Œ/ 6Œ
 Œ/ Œ/ 6Œ
Œ/ 
!44)#Ñ>$/D E
/  !44)#Œ$/D E
„ 
* !44)#$/D6 E

8

÷ 
  Ñ  
)

   G  
H

<!%  
 
   

   
 
 
 o
 
   #
 
$

Π-
Œ÷
  6 Œ
0 
5 Œ/6Œ 9 + , 5
-  6Π#   

 
9$
+ 
Π 
- *

8
goto(Ñ0, ) = Ñ  Œ -
goto(Ñ0, ) = Ñ2  6 Œ
 #Ñ9 $/Ñ* 9 + , 5
 #Ñ+6$/Ñ, 
 #Ñ, $/Ñ*  * 
goto(Ñ4, ) = Ñ5
goto(Ñ4, ) = Ñ2

  


   
Ñu     
Ñ      IJ K  
Ñ  A    K   
Ñ             
ÑA    
Ñ      K  K  
! Ñ
;    Ñ>/Œ   

 
      


Ñ 
  
  GH 

  
 6  

Ñu      
Ñ     
Ñ   A      
Ñ           
ÑA      
Ñ        
! %(0; 8

AºáION GOáO
 6   Π
Ñ9
 *   - +
Ñ-     
Ñ+ 
 , +  
Ñ*  * *  
Ñ,
 *   5 +
Ñ5   -  

Ñt I t ti
´    

´        #  $
´    

´     

´    i     #  $
´        #K $
´    K    #K  K$
´ K   
X



     
ÑÑ A
Ñ  
Ñ   
º nonic coection
Iu  Ñ ß Ñ  Ñ ß    Ñ ß  
 ß     ß    ß !
I  ÑÑß!
I  Ñß    ß!
I  Ñ ß!
IA   ß    ß   ß     ß !
I  ß!
I  Ñß    ß    ß     ß !
Ië   ß!
Iw  ß!
I§  Ñ ß!
Ñ4#-$
 
Ñ  " Ñ "# #X
Ñ  !  !
Ñ  !  !
 ! $  !
%  ! $  !

(
 
  
ÿ+ 
 

  

?Ñ/4ß /š  
%(0;?+/š/:
 L:
?/4ߚ  
%(0;?+/š/: LH

£   
      
   
÷  ÷   ÷÷   Ñ 
)   o
áwo cases arise
 



 M   0     
 
   

    
N         
N  
   
 
classic example  




 M   %   
 
   

    
  
 


    
classic example4M0 

 
Ñ  
  Ñ4#-$

Ñ4#-$

 


4 

 
 
  
 4#9$

   
  

 !44)


Œ"
Added by
 . S¶ ::= S closure
+ Ñ/3%
* %/
Ñ 
Ñu  Ñß Ñ  Ñß   Ñß 

 Ñu Ñ  Ñ  ÑÑß!


 Ñu   Ñ  Ñß   Ñß   ß  !
 Ñ   Ñ Ñß   ß!
 Ñ   ÑA Ñß!
 Ñ   Ñ Ñß!
 ÑA   Ñ  Ñß!
-
Ñ
  
9 + * 5
% , 
L
Ñ4#-$


  


     Ñ
Ñu    Ñ   
Ñ       
Ñ   Ñ    A
Ñ Ñ %    
ÑA      
Ñ     %  
Ñ     %

%
Ñ*
 

  


 
?K / ߚ
  Ñ  
 
 
!44)#K$
Œ"% 
Ñ4#-$ 
0. S¶ ::= S New production adds
- Ñ/3%3Aa ³a´ to FOLLOW(A)
+ %/

  
Ñ 
Ñu  Ñß Ñ  Ñß   Ñß  
ƒ ß  !ƒ ß  "
 Ñu Ñ  Ñ  ÑÑß!
 Ñu   Ñ  Ñß   Ñß   ß !
 Ñ   Ñ Ñß   ß!
 Ñ   ÑA Ñß!
 Ñ   Ñ Ñß!
 ÑA   Ñ  Ñß!
2   !  Ñ# $ƒ  ß  "
2   #! Ñw $ƒ  ß "
2   !  ѧ $ƒ ß "
Ñ4#-$

   2 
      Ñ 
Ñu   Ñ § Ñ    
Ñ        
Ñ   Ñ     A
Ñ Ñ       

ÑA       
Ñ       
Ñ     
Ñë Ñ w
Ñ    O
Ñw

 

     Ñ  


4#-$
)     
 
       in
the states of the parser

If, in a single left-to-right scan, we


can construct a reverse rightmost
derivation, while using at most a
single token lookahead to resolve
ambiguities, then the grammar is
LR( )
4#$ 


   

4#$ 
   
 

 



 

% 4#$ 
 ?  þš 

     ß 

   

þ
 
   
 
#  
  $

) 4#-$ 


o
"4#-$ ?%/Bß öPš
4#-$ 
 

  -

 4#-$ 

 
?%/Bß öPš
?%/Bß öPš
  
 


?%/Bß öPDEš
4#-$ 
)2
  
 

 
o
.     
 
 
   
  
.  
    

 
ß 
 
?%/Bß öPš
  

?%/BöPßš


Ñ4#-$
  

4#9$

O

áhe point
! ?%/ ßš ?|/ ßš 
     % |  
( 4#-$ 

    



 4#-$ 



   
    "
  


  
  ?Ñ>/ß Ñ š
   

   
   
 
   

%4#-$ ?K / ß þ÷š


     "  

  Ñ @ èK  è þ  
.  /è  
.   ÷


   
ÿ  ÷
 
Œ  ÷ 
. Œ4#-$  
      
 


  ;!%  &
   "

. 8  
 
  
 <!%



  
4#-$
 
8    ?K  ß þ  š 

  
      
 
   


    

 
 
   "  



   
   
þ #  
   ? /ß š 
 $
  
 #ÿ$
  
 #ÿ$

A  

  ?K / ß þ š$ ÿ
  |/ $ >
   $ !0Ñ#þ$
? /ß šR ÿ 
? /ß š ÿ
A   
  
  # A /
$
 ÿ
4#-$ 
4ÿ 
 4#-$ 
 â   
 
   #ÿâ$

  
  
?K / â ß þ ÷š

?K / ß âþ ÷š$ ÿ


0ÿ

   
 
   "   #ÿâ$


   


    "â
 #ÿâ$  
 

   & â 
ÿ
    #ÿâ$
    #0B$
C
  
?K / â ß þ š

?K / ß âþ š$ 0
C> 
 #C$
 C>
(   

 4#-$ 

)
 
       4#-$ 

  ?Ñ /ß Ñ š 
Ñ>

 
      >
Ñ

 
   
 
   
  
     

 4#-$ 

   
#8>$
( D
 #D?Ñ>/ß Ñ šE$E

A  

 
  
0 (   
 B

  #ÿâ$€ 9   #ÿâ$R (
  #ÿâ$ (
A   
 
  # A /
$

K  Ñ  ÷ ÷  !"


4#-$
 
áhe Algorithm

- 
    

 4#-$ 
 8>
+ Ñ 
 

  ÿ 
$ ?K / ß þ š$ ÿ    #ÿ $/ÿ  
%(0;? š 
   #
  $
$ ?K / ß š$ ÿ  
%(0;? š K!!" 
$ ?Ñ>/Ñ ß š$ ÿ  
%(0;?  š   
* 0  #ÿ K$/ÿ  
8?  Kš  
, %    
 %(0; 8 
  
5   
 
 


  

   ?Ñ /ß Ñ š

K  Ñ  ÷ ÷ K    !


Œ"
9 Ñ>/Ñ
- Ñ/3%3%
+ %/
  
Ñ 
Ñu  Ñ ß Ñ     Ñ ß      Ñ ß     
Ñ ß     ƒ ß ! "
 Ñu Ñ  Ñ  ÑÑß   !
 Ñu   Ñ  Ñß      Ñß     ƒ ß !% !
 Ñ   Ñ Ñß     ƒ  ß!%!
 Ñ   ÑA Ñß   !
 Ñ   Ñ Ñß   !
 ÑA   Ñ  Ñß   !
 Ñu   Ñë  Ñß    !
 Ñë   Ñw  Ñß   !
 Ñu   ѧ  ƒ ß! !

?Ñ/ß  š  


%(0;?+š/
 
ß 
           #
 

  
Œ"

è  
 o

 Ñ  Ñ !   
 Ñ    #   
 Ñ  $  


   

Iu  Ñ ßÑ    Ñ  ß     Ñ  ß      ß    !    ß


   !   ß   !
I  ÑuÑ ß  !
ÿ $ƒÑ ß  !eof !ƒ ß!eof " !44)#Ñ>$/D E
I  Ñ  ß  ! !44)#Ñ$/D E
IA    ß    !   ß    !
!44)#4$/D/ E
  ß    !    ß    !!
I    ß   !!
!44)#$/D/ E
I  Ñ  ß     ß   
  ß       ß   !
Ië   ß   !!
Iw  ß   !!
I§ Ñ   ß  !
Iu   ß  !
I    ß     ß   
  ß       ß   !
I    ß  !
I    ß  ! ?Ñ/4ß /š  
%(0;?+/š/:
 :
?/4ߚ  
%(0;?+ š/: :
    # 

  
% 4
Π

  
  
  
  
  

   

       




   
  
 Ñ
„ Ñ vÑ A
„  w 
„
 Ñ
„  
„
 § 
„  
 Ñ
„ 
 
„ 
ë
„ Ñ 
X         
   

÷  
     


 Ñ   
'   '
 8  
'  %'
Π'
Œ"
/Œ