od Him » 21. 6. 2009 14:26
Podle slajdu Bartaka jsem si to zkusil a nezda se mi to tak tezke, ale bez vyzkouseni se to spatne pamatuje..
Kód: Vybrat vše
Krok 1] Prepis pravidel podle oznaceni:
A1 ~ E
A2 ~ T
A3 ~ F
A1 -> A1+A2 -- v kroku 2 odstranim levou rekurzi
A1 -> A2
A2 -> A2+A3 -- v kroku 2 odstranim levou rekurzi
A2 -> A3
A3 -> (A1)
A3 -> a
Krok 2]
A1 -> A2 -- neni v poradku pro treti krok
A1 -> A2Z1 -- neni v poradku pro treti krok
Z1 -> +A2 | +A2Z1
A2 -> A3 -- neni v poradku pro treti krok
A2 -> A3Z2 -- neni v poradku pro treti krok
Z2 -> *A3 | *A3Z2
A3 -> (A1) -- pro treti krok v poradku
A3 -> a -- -||-
Krok 3]
A3 -> a
A3 -> (A1)
A2 -> (A1)
A2 -> (A1)Z2
A2 -> a
A2 -> aZ2
A1 -> (A1)
A1 -> a
A1 -> (A1)Z2
A1 -> AZ2
A1 -> (A1)Z1
A1 -> aZ1
A1 -> (A1)Z2Z1
A1 -> AZ2Z1
Z1 -> +A2 | +A2Z1 -- je v poradku pro krok 4
Z2 -> *A3 | *A3Z2 -- je v poradku pro krok 4
Krok 4]
-- nic neni potreba delat
Krok 5]
Provede se tak, ze vzdy pro terminal, ktery nam kazi nejake pravidlo vytvorime nove pravidlo: X -> x (novy neterminal X pro terminal x)
Podle slajdu Bartaka jsem si to zkusil a nezda se mi to tak tezke, ale bez vyzkouseni se to spatne pamatuje..
[code]
Krok 1] Prepis pravidel podle oznaceni:
A1 ~ E
A2 ~ T
A3 ~ F
A1 -> A1+A2 -- v kroku 2 odstranim levou rekurzi
A1 -> A2
A2 -> A2+A3 -- v kroku 2 odstranim levou rekurzi
A2 -> A3
A3 -> (A1)
A3 -> a
Krok 2]
A1 -> A2 -- neni v poradku pro treti krok
A1 -> A2Z1 -- neni v poradku pro treti krok
Z1 -> +A2 | +A2Z1
A2 -> A3 -- neni v poradku pro treti krok
A2 -> A3Z2 -- neni v poradku pro treti krok
Z2 -> *A3 | *A3Z2
A3 -> (A1) -- pro treti krok v poradku
A3 -> a -- -||-
Krok 3]
A3 -> a
A3 -> (A1)
A2 -> (A1)
A2 -> (A1)Z2
A2 -> a
A2 -> aZ2
A1 -> (A1)
A1 -> a
A1 -> (A1)Z2
A1 -> AZ2
A1 -> (A1)Z1
A1 -> aZ1
A1 -> (A1)Z2Z1
A1 -> AZ2Z1
Z1 -> +A2 | +A2Z1 -- je v poradku pro krok 4
Z2 -> *A3 | *A3Z2 -- je v poradku pro krok 4
Krok 4]
-- nic neni potreba delat
Krok 5]
Provede se tak, ze vzdy pro terminal, ktery nam kazi nejake pravidlo vytvorime nove pravidlo: X -> x (novy neterminal X pro terminal x)
[/code]