uebungsblatt4-notizen
                        =====================

Author: Jan Schäfer 
Date: 2011-05-23 14:24:22 CEST


Table of Contents
=================
1 Übung 4 - 20. Mai 
    1.1 Mehrdeutigkeit erkennen 
        1.1.1 Beispiel: 
    1.2 Aufgabe 1 
        1.2.1 a) 
        1.2.2 b) 


1 Übung 4 - 20. Mai 
~~~~~~~~~~~~~~~~~~~~

1.1 Mehrdeutigkeit erkennen 
============================
   Aussage letzte Woche:
   - Eindeutig wenn jedes Nicht-Terminal zu maximal 
     einem Nicht-Terminal abgeleitet werden kann

1.1.1 Beispiel: 
----------------
    S -> A 
    A -> B | x
    B -> x

  + Eindeutig? 
    Mehrdeutig!
    Beispiel: x
    A -> B -> x
    A -> x
    

1.2 Aufgabe 1 
==============

1.2.1 a) 
---------
* 1. ((xy*x) | (yx*y))? 
  + Systematisch 
    S -> A | eps
    A -> B | C
    B -> xYx
    C -> yXy
    Y -> yY | eps
    X -> xX | eps
    
  + Vereinfacht (||) 
    S -> xYx | yXy | eps
    Y -> yY | eps
    X -> xX | eps
    
    
* 2. ((0|1)+ "." (0|1)*)|((0|1)* "." (0|1)+) 
  + Systematisch 
    S -> A | B
    A -> P.N
    B -> N.P
    P -> D N
    N -> D N | eps
    D -> 0 | 1
    
  + Vereinfacht 
    S -> P.N | N.P
    P -> 0N | 1N
    N -> 0N | 1N | eps
    

1.2.2 b) 
---------
* Left Factoring? 
  
  S -> if E then S else S
  S -> if E then S
  
  + Left Factoring results in 
    S -> if E then S X
    X -> eps
    X -> else S
    
* Wann LL(1)? 
  FIRST und FOLLOW Mengen! Siehe Blatt 5
  
* 1. ((xy*x) | (yx*y)) 
  S -> xYx | yXy | eps
  Y -> yY | eps
  X -> xX | eps
  
  + LL(1) da... 
    Immer nur maximal 1 Nichterminal in den Regeln vorkommnt
    - Korrekte Begründung? 
      S -> xY | xX
      Y -> x
      X -> x
      
      * Beispiel: 
        xx
        S -> xY -> xx
        S -> xX -> xx
        
  + Schreibe in Normalform 
    S -> xYx#
    S -> yXy# 
    S -> eps#
    Y -> yY 
    Y -> eps
    X -> xX
    X -> eps
    
  + LL(1)? 
    - Lemma aus der Vorlesung 
      A CFG is LL(1) IFF for any two productions
      A -> beta, A -> gamma the following holds:
      (FIRST1(beta) + FOLLOW1(A)) /\ FIRST1(gamma) + FOLLOW1(A) = { }
      
    - Schaue alle Nicht-Terminale an mit mehr als einer Produktion 
      * S 
        FOLLOWS(S) = { }
        S -> xYx# => FIRST1(xYx#) = { x }
        S -> yXy# => FIRST1(yXY#) = { y }
        S -> eps# => FIRST1(eps) = { eps } + FOLLOW1(S) = { }
        OK
      * X 
        FOLLOW(X) = { y }
        X -> xX  => FIRST1(xX) = { x }
        X -> eps => FIRST1(eps) = { eps } + FOLLOW1(X) = { y }
        OK
        y genauso
              
* 2. ((0|1)+ "." (0|1)*)|((0|1)* "." (0|1)+) 
  S -1> NE.E
  S -2> E.NE
  N -3> 0 
  N -4> 1
  E -5> NE 
  E -6> eps
  + Wo ist das Problem? 
    0.0
    S -1> NE.E -3> 0E.E -6> 0.E -5> 0.NE -3> 0.0E -6> 0.0
    S -2> E.NE -5> NE.NE -3> 0E.NE -6> 0.NE -3> 0.0E -6> 0.0
    Also KEIN LL(1)
    
    
  + Lösung 1 
    S -> A.B | B.A
    A -> 0B | 1B
    B -> A | eps
    - LL(1) da 
      es gibt keine Mehrdeutigkeiten oder Linksrekursionen.
      * Reicht aus? 
        NEIN
        + FIRST und FOLLOW bestimmen 
          B -> A
          B -> eps
          FOLLOW(B) = { . }
          FIRST(A) = { 0, 1 }
          FIRST(eps) = { eps }
          OK
          
          S -> A.B
          S -> B.A
          FIRST(A) = { 0, 1 }
          FIRST(B) = { 0, 1, eps }
          => NICHT LL(1)!
          
  + Lösung 2 
    S -> 0A | 1A | .B
    A -> 0A | 1A | .C
    B -> 0C | 1C
    C -> eps | B
    
  + Lösung 3 
    S -> D.E | .D
    E -> NE | eps
    D -> NE
    N -> 0 | 1
    
    - LL(1) da... 
      Diese Grammatik ist nun weder linksrekursiv noch 
      mehrdeutig und somit eine LL(1) Grammatik.
      * Reicht aus? 
        NEIN! FOLLOW und FIRST berechnen
        
        
  + Lösung 4 
    S -> U.Z | .U
    U -> 0Z | 1Z
    Z -> eps | 0Z | 1Z
    
* Allgemein 
  Derevenets, Göbel, Wild:
  
  Da reguläre Sprachen immer einen äquivalenten DEA
  besitzen, und in diesem für jeden Zustand und jedes Eingabesymbol nur
  ein Nachfolgezustand existiert, kann man aus dem Automaten direkt
  eine LL(1)-Grammatik ablesen: Man führt für jeden Zustand ein
  Nichtterminal, sowie Regeln Form Z → aZ für jede 1 2 ausgehende Kante
  ein, über die man im Automat mit a von Z1 nach Z2 gelangt. Für
  Endzustände fügen wir außerdem noch die Regel Zf → # hinzu.  Man
  erhält also nur Regeln, deren rechte Seiten mit einem Terminal
  anfangen. Der Determinismus des Automaten garantiert außerdem, dass
  alle diese Terminale (für ein Nichterminal) verschieden
  sind. Folglich ist die resultierende Grammatik LL(1).