alg lengyel forma

36

Upload: lefkocd

Post on 25-Jul-2015

429 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Alg Lengyel Forma
Page 2: Alg Lengyel Forma

a+b ab+ +ab

infix kifejezés

Page 3: Alg Lengyel Forma

a+b ab+ +ab

postfix kifejezés

Page 4: Alg Lengyel Forma

a+b a b + +ab

prefix kifejezés

Page 5: Alg Lengyel Forma

ab+ +ab

prefix kifejezéspostfix kifejezés

Lengyel formaJ. Lukasewitz lengyel matematikus használta először.

Page 6: Alg Lengyel Forma

(a+b)*(c-d)

postfix kifejezés

infix kifejezés

Példa:

ab+cd-*

Page 7: Alg Lengyel Forma

ab+cd-*

Előny:A műveleti jelek olyan sorrendben követik egymást, amilyen sorrendben végre kell hajtani azokat.

Lengyelforma

(a+b)*(c-d)

Infix forma

1 3 2 1 2 3

1

Page 8: Alg Lengyel Forma

a

Előny: infix forma:

A műveleti jel (operátor) közvetlenül az operandusai után áll.

b +

op1 op2 műv

(a+b)*(c-d)

op1

c d -

op1 op2 műv

op2 műv

*

2

Page 9: Alg Lengyel Forma

Kifejezés lengyel formára hozása:

(1+2)*(3-4) 1 2 + 3 4 - *(1+2)*(3-4)

(a+b*c)*(d*3-4) abc*+d 3*4-*

Page 10: Alg Lengyel Forma

1( + 2 ) * ( 3 - 4 )x:

y:

s:verem

sorozat

sorozat

Az x sorozatot balról jobbra haladva dolgozzuk fel.A sorozat végét ; jelzi.

Page 11: Alg Lengyel Forma

1( + 2 ) * ( 3 - 4 )

(

x:

y:

s:

A következő szimbólum nyitózárójel :tegyük a verembe.

verem

Page 12: Alg Lengyel Forma

( +1 2 ) * ( 3 - 4 )

(

1

x:

y:

s:

A következő szimbólum operandus:írjuk ki.

Page 13: Alg Lengyel Forma

21( + ) * ( 3 - 4 )

( +

1

x:

y:

s:

A következő szimbólum operátor:1. legfeljebb a nyitózárójelig kivesszük a veremből az operátornál nagyobb prioritású operátorokat és kiírjuk azokat,2. Ezt az operátort betesszük a verembe.

Page 14: Alg Lengyel Forma

)( +1 2 * ( 3 - 4 )

( +

1 2

x:

y:

s:

A következő szimbólum operandus:írjuk ki.

Page 15: Alg Lengyel Forma

2 *)( +1 ( 3 - 4 )

(

1 2 +

x:

y:

s:

A következő szimbólum csukózárójel:1. Írjuk ki a verem tetején lévő elemeket egészen a nyitózárójelig.2. Vegyük ki a verem tetejéről a nyitózárójelet.

Page 16: Alg Lengyel Forma

) (2 *( +1 3 - 4 )

*

1 2 +

x:

y:

s:

A következő szimbólum operátor:1. legfeljebb a nyitózárójelig kivesszük a veremből az operátornál nagyobb prioritású operátorokat és kiírjuk azokat,2. Ezt az operátort betesszük a verembe.

Page 17: Alg Lengyel Forma

* 3) (2( +1 - 4 )

* (

1 2 +

x:

y:

s:

A következő szimbólum nyitózárójel :tegyük a verembe.

Page 18: Alg Lengyel Forma

( -* 3)2( +1 4 )

* (

1 2 + 3

x:

y:

s:

A következő szimbólum operandus:írjuk ki.

Page 19: Alg Lengyel Forma

3 4( -*)2( +1 )

* ( -

1 2 + 3

x:

y:

s:

A következő szimbólum operátor:1. legfeljebb a nyitózárójelig kivesszük a veremből az operátornál nagyobb prioritású operátorokat és kiírjuk azokat,2. Ezt az operátort betesszük a verembe.

Page 20: Alg Lengyel Forma

- )3 4(*)2( +1

* ( -

1 2 + 3 4

x:

y:

s:

A következő szimbólum operandus:írjuk ki.

Page 21: Alg Lengyel Forma

4- )3(*)2( +1

* (

1 2 + 3 4 -

x:

y:

s:

A következő szimbólum csukózárójel:1. Irjuk ki a verem tetején lévő elemeket egészen a nyitózárójelig.2. Vegyük ki a verem tetejéről a nyitózárójelet.

Page 22: Alg Lengyel Forma

)4-3(*)2( +1

*

1 2 + 3 4 - *

x:

y:

s:

Elértük a kifejezés végét:Írjuk ki a veremben lévő összes elemet.

Page 23: Alg Lengyel Forma

Lengyelforma kiértékelése

-31 2 + 3 4 - *

Page 24: Alg Lengyel Forma

2

1

1 + 3 4 - *y:

v:verem

sorozat

Page 25: Alg Lengyel Forma

2

1

1 + 3 4 - *y:

v: verem

A következő szimbólum operandus:Tegyük a verembe.

Page 26: Alg Lengyel Forma

1 +2

1 2

3 4 - *y:

v: verem

A következő szimbólum operandus:Tegyük a verembe.

Page 27: Alg Lengyel Forma

2 31 +

3

4 - *y:

v: verem

21

A következő szimbólum operátor:1. Vegyük ki a veremből a második operandust2.Vegyük ki a veremből az első operandust.3. Számítsuk ki az adott műveleti jellel a kifejezés értékét.4. Az így kapott eredményt tegyük a verembe.

3

Page 28: Alg Lengyel Forma

+ 42 31

3 3

- *y:

v: verem

A következő szimbólum operandus:Tegyük a verembe.

Page 29: Alg Lengyel Forma

3 -+ 421

3 3 4

*y:

v: verem

A következő szimbólum operandus:Tegyük a verembe.

Page 30: Alg Lengyel Forma

4 *2 31 + -y:

v: verem

4

3 -1

3 -1

A következő szimbólum operátor:1. Vegyük ki a veremből a második operandust2.Vegyük ki a veremből az első operandust.3. Számítsuk ki az adott műveleti jellel a kifejezés értékét.4. Az így kapott eredményt tegyük a verembe.

Page 31: Alg Lengyel Forma

-4 *2 31 +y:

v: verem

-1

-3

3 -3

A következő szimbólum operátor:1. Vegyük ki a veremből a második operandust2.Vegyük ki a veremből az első operandust.3. Számítsuk ki az adott műveleti jellel a kifejezés értékét.4. Az így kapott eredményt tegyük a verembe.

Page 32: Alg Lengyel Forma

*-42 31 +y:

v: verem-3

Az eredmény a verem tetején van.

Elértük a kifejezés végét

Page 33: Alg Lengyel Forma

Lengyel formára alakítás

• Tegyük fel, hogy az x „token”-ekből álló sor tartalmazza a szintaktikailag helyes kifejezést,

• Egy token lehet: – Operandus, vagy– Operátor (bináris), vagy– ‘(‘, vagy ‘)’

• az y sorba hozzuk létre a postfix formájú kifejezést,

• közben felhasználva az s vermet, mely operátorokat és ‘(‘ –t tartalmazhat

Page 34: Alg Lengyel Forma

;

not x.IsEmpty

e = operandus?

y.in(e)

e = ‘(‘ e = ‘)‘ e= operátor

y.Empty; s.Empty;

s.push(e)

s.top ≠ ’(’∧prec(s.top) ≥prec(e) ∧¬ s.Is_Empty

y.in(s.pop)

s.top ≠ ‘(‘

y.in(s.pop)

s.push(e)

e←x.out

¬ s.Is_Empty

y.in(s.pop)

s.pop

Page 35: Alg Lengyel Forma

Lengyel forma kiértékelése

• Tegyük fel, hogy az y sor tartalmazza a postfix alakban lévő kifejezést,

• Értékeljük ki, felhasználva a v vermet, mely operandusokat tartalmazhat

• Az eredményt tároljuk a z változóban

Page 36: Alg Lengyel Forma

not y.IsEmpty

e = operandus?

v.push(e) op2 ← v.popop1 ← v.popv.push ( ”op1 e op2”)

e←y.out

z ← v.pop

v.Empty; z← 0;