2.10. Egyszerű precedencia elemzés

[Megjegyzés]Megjegyzés

Az előző fejezethez hasonlóan itt is használjuk a First és Last halmazokat nemterminális szimbólumok esetén, viszont más jelentéssel. A First jelöli az adott nemterminálisból (legalább egy lépésben) levezethető szimbólumsorozatok kezdő szimbólumainak halmazát. Itt a szimbólumok lehetnek terminálisok és nemterminálisok is. A Last az adott nemterminálisból levezethető szimbólumsorozatok utolsó szimbólumainak halmazát jelenti. Itt is megengedjük mind a terminálisokat, mind a nemterminálisokat.

A terminálisok között következő relációkat definiáljuk:

  1. A First és Last halmaz a következő lesz:

     FirstLast
    S{S,a}{a}

    Ez alapján az elemző táblázat:

     #aS
    # <<<<
    a>>>> 
    S == 
  2. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,B,c}{a,b}
    A{c}{A,c}
    B{c}{B,c}

    Ez alapján az elemző táblázat:

     #abcSAB
    #   << <<<<
    a>>      
    b>>      
    c >>>><< ====
    S       
    A ==,>>     
    B  ==,>>    

    A nyelvtanban két szabálynak is ugyaz a jobb oldala, sőt ütközéseket is tartalmaz a táblázat, így nem alkalmazhatjuk!

  3. A First és Last halmaz a következő lesz:

     FirstLast
    S{a,b}{A,d,c}
    A{c,d,e,f}{c,d}

    Ez alapján az elemző táblázat:

     #abcdefSA
    # <<<<      
    a   <<<<<<<< ==
    b   == ==   
    c>>        
    d>>        
    e   ====    
    f   ==     
    S         
    A>>        
  4. A First és Last halmaz a következő lesz:

     FirstLast
    S{b,A}{b,S,A}
    A{b}{b,A}

    Ez alapján az elemző táblázat:

     #abcSA
    #  <<  <<
    a  << ==<<
    b>>>> ==  
    c  <<  ==
    S>>     
    A>>==,>>    
  5. A First és Last halmaz a következő lesz:

     FirstLast
    E{E,T,F,),i}{T,F,),i}
    T{T,F,(,i}{F,),i}
    F{(,i}{),i}

    Ez alapján az elemző táblázat:

     #+*()iETF
    #   << <<<<<<<<
    +   << << <<,==<<
    *   << <<  ==
    (   << <<<<,==<<<<
    )>>>>>> >>    
    i>>>>>> >>    
    E ==  ==    
    T>>>>== >>    
    F>>>>>> >>    
  6. A First és Last halmaz a következő lesz:

     FirstLast
    S{i,a}{a,S}

    Ez alapján az elemző táblázat:

     #abiteS
    # << <<   
    a>>    >> 
    b    ==  
    i  ==    
    t << <<  ==
    e << <<  ==
    S>>    ==,>> 
  7. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,a,b}{A,b}
    A{a,b}{A,b}

    Ez alapján az elemző táblázat:

     #abSA
    # <<<< <<
    a <<<< ==
    b>>>>>>  
    S     
    A>><<,>><<,>> ==
  8. A First és Last halmaz a következő lesz:

     FirstLast
    S{a,c}{C,D,a,b,c}
    B{b}{D,b,c}
    C{a,b}{D,b,c}
    D{a}{c}

    Ez alapján az elemző táblázat:

     #abcSBCD
    # << <<    
    a>><<,==<<== == ==
    b>><<,>>     ==
    c>><<,>><<   == 
    S        
    B ==      
    C>>       
    D>>>>      
  9. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,a}{A,B,b,c}
    A{a}{b}
    B{b}{c}

    Ez alapján az elemző táblázat:

     #abcSAB
    # <<   << 
    a <<==  == 
    b>> <<,>>==  ==
    c>>  >>   
    S       
    A>> <<,==   ==
    B>>  ==   
  10. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,B,a,b,c}{a,b}
    A{B,a,b,c}{B,b,c}
    B{a,c}{B,b,c}

    Ez alapján az elemző táblázat:

     #abcdSAB
    # <<<<<<  <<<<
    a>> ==     
    b>><<,>> <<==  ==
    c <<,>> <<   ==
    d << <<   ==
    S        
    A ==      
    B >>      
  11. A First és Last halmaz a következő lesz:

     FirstLast
    S{a,b}{b,c,d}
    A{f}{f}
    B{f}{f}

    Ez alapján az elemző táblázat:

     #abcdfSAB
    # <<<<      
    a     << ====
    b>>    << ====
    c>>        
    d>>        
    f  >>>>>>    
    S         
    A  == ==    
    B   ====    
  12. A First és Last halmaz a következő lesz:

     FirstLast
    S{a}{b}
    A{a,c}{b,c}
    B{a,d}{b,d}

    Ez alapján az elemző táblázat:

     #abcdSAB
    # <<      
    a << <<<< ====
    b>> ==,>>     
    c  >>     
    d  >>     
    S        
    A  ==     
    B  ==     

    Az ütközés mellett egyes szabályok jobb oldalai is egybeesnek, így nem egyszerű precedencia nyelvtan a feladatban szereplő nyelvtan.

  13. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,a,b}{B,c}
    A{a,b}{b}
    B{b,c}{c}

    Ez alapján az elemző táblázat:

     #abcSAB
    # <<<<  << 
    a <<<<  == 
    b  <<,>><<,>>  ==
    c>>  >>   
    S       
    A  ==   ==
    B>>  ==   
  14. A First és Last halmaz a következő lesz:

     FirstLast
    S{B,b}{a}
    A{a,b}{a,b}
    B{B,b}{A,B,a,b}

    Ez alapján az elemző táblázat:

     #abSAB
    #  <<  <<
    a>>==,>>>>   
    b <<,>><<,==,>> == 
    S      
    A >>>>   
    B ==,>><<,>>  <<,==
  15. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,a,c}{A,B,a,c}
    A{a,c}{A,B,a,c}
    B{a,b,c}{A,B,a,c}

    Ez alapján az elemző táblázat:

     #abcSAB
    # << << << 
    a>><<,>>>><<,>> == 
    b <<<<<<  ==
    c>><<,>><<,>><<,>>  ==
    S       
    A>><<,>><<,>><<,>>  ==
    B>>>>>>>>   
  16. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,a,b}{A,B,a}
    A{a,b}{a}
    B{A,a,b}{B,a}

    Ez alapján az elemző táblázat:

     #abSAB
    # <<<< << 
    a>>>>>>   
    b <<,==<< <<==
    S      
    A>><<<< <<==
    B>>     
  17. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,B,a,b,c}{A,a,c}
    A{B,a,b}{a,c}
    B{b}{b}

    Ez alapján az elemző táblázat:

     #abcSAB
    # <<<<<< <<<<
    a>>>>>>    
    b  ==>>   
    c>>>>>>    
    S       
    A>><<<<  ==<<
    B   ==   
  18. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,b}{c}
    A{b}{A,b}
    B{c}{c}

    Ez alapján az elemző táblázat:

     #bcSAB
    # <<  << 
    b <<>> == 
    c>> >>   
    S      
    A  <<,>>  ==
    B  ==   
  19. Az eredeti nyelvtanban az A felesleges szimbólum, így most is kihagyjuk. A First és Last halmaz a megmaradt nyelvtanban a következő lesz:

     FirstLast
    S{B,a,b}{B,a}
    B{a,b}{B,a}

    Ez alapján az elemző táblázat:

     #abSB
    # <<<< <<
    a>><<,>><< ==
    b <<<< ==
    S     
    B>>==,>>   
  20. A First és Last halmaz a következő lesz:

     FirstLast
    S{A,a,b}{B,a,b}
    A{a,b}{a,b}
    B{a,c}{a,b}

    Ez alapján az elemző táblázat:

     #abcSAB
    # <<<<  << 
    a>><<<<,>><<,>> ====
    b>>==>>    
    c <<==<<  ==
    S       
    A  ====   
    B>> ==