Aritmetikai kifejezések lengyelformára hozása

Hasonló dokumentumok
4. VEREM. Üres: V Verembe: V E V Veremből: V V E Felső: V E

Készítette: Nagy Tibor István

Adatszerkezetek Adatszerkezet fogalma. Az értékhalmaz struktúrája

Absztrakt adatstruktúrák A bináris fák

Adatszerkezetek és algoritmusok

Verem Verem mutató 01

Objektum elvű alkalmazások fejlesztése Kifejezés lengyel formára hozása és kiértékelése

Szoftvertervezés és -fejlesztés I.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

Kifejezések. Kozsik Tamás. December 11, 2016

Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája

infix kifejezés a+b ab+ +ab postfix kifejezés prefix kifejezés a+b ab+ +ab a+b ab+ +ab Készítette: Szabóné Nacsa Rozália

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Bevezetés az informatikába

Logikai áramkörök. Informatika alapjai-5 Logikai áramkörök 1/6

Ellenőrző kérdések. 36. Ha t szintű indexet használunk, mennyi a keresési költség blokkműveletek számában mérve? (1 pont) log 2 (B(I (t) )) + t

az Excel for Windows programban

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Kifejezések. Kozsik Tamás. December 11, 2016

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

DISZKRÉT MATEMATIKA: STRUKTÚRÁK Előadáson mutatott példa: Bércesné Novák Ágnes

Algoritmusok és adatszerkezetek I. 2. előadás

Kalkulus. Komplex számok

Raszteres elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

2005_01/1 Leírtunk egymás mellé hét racionális számot úgy, hogy a két szélső kivételével mindegyik eggyel nagyobb a két szomszédja szorzatánál.

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

Halmazelmélet. 1. előadás. Farkas István. DE ATC Gazdaságelemzési és Statisztikai Tanszék. Halmazelmélet p. 1/1

Lekérdezések az SQL SELECT utasítással

Algoritmusok és adatszerkezetek I. 2. előadás

FUNKCIONÁLIS PROGRAMOZÁS

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai. INFORMATIKA II. (programozás) kategória

Megoldások. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) 1. Számítsd ki a következő kifejezések pontos értékét!

A C programozási nyelv I. Bevezetés

FUNKCIONÁLIS PROGRAMOZÁS GYAKORLAT JEGYZET

A C programozási nyelv I. Bevezetés

5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI

1. Algebrai alapok: Melyek műveletek az alábbiak közül?

A verem (stack) A verem egy olyan struktúra, aminek a tetejéről kivehetünk egy (vagy sorban több) elemet. A verem felhasználása

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

1. A polinom fogalma. Számolás formális kifejezésekkel. Feladat Oldjuk meg az x2 + x + 1 x + 1. = x egyenletet.

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

2. Algebrai átalakítások

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Algebra

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

A programozás alapjai előadás. Amiről szólesz: A tárgy címe: A programozás alapjai

A 2016/2017 tanévi Országos Középiskolai Tanulmányi Verseny második forduló javítási-értékelési útmutató. INFORMATIKA II. (programozás) kategória

3 A C programozási nyelv szintaktikai egységei

Algoritmusok. Dr. Iványi Péter

file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>

PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv

Programozás I gyakorlat

KOVÁCS BÉLA, MATEMATIKA I.

MATLAB alapismeretek I.

Programozási nyelvek (ADA)

1. előadás: Halmazelmélet, számfogalom, teljes

Miről lesz ma szó? A PROGAMOZÁS ALAPJAI 1. Bemutatkozás. Bemutatkozás. Bemutatkozás. Bemutatkozás. 1. előadás. A tárgy címe: A programozás alapjai 1

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Excel 2010 függvények

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Bevezetés az informatikába

1. Alapok. #!/bin/bash

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

1. fogalom. Add meg az összeadásban szereplő számok elnevezéseit! Milyen tulajdonságai vannak az összeadásnak? Hogyan ellenőrizzük az összeadást?

Adatszerkezetek és algoritmusok

Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

Relációs algebra 1.rész alapok

Negatív alapú számrendszerek

Amortizációs költségelemzés

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

BASH script programozás II. Vezérlési szerkezetek

Objektumorientált Programozás III.

Fordítóprogramok. Aszalós László szeptember 7.

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r

Vezérlési szerkezetek

A valós számok halmaza

Adatszerkezetek I. 7. előadás. (Horváth Gyula anyagai felhasználásával)

Hatványozás. A hatványozás azonosságai

2018, Diszkrét matematika

A SZÁMFOGALOM KIALAKÍTÁSA

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

SZÁMÍTÁSOK A TÁBLÁZATBAN

Mátrixok február Feladat: Legyen A = ( ( B =

Rekurzió. Dr. Iványi Péter

Műveletek egész számokkal

Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez

1. Halmazok, számhalmazok, alapműveletek

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

2016, Diszkrét matematika

Java II. I A Java programozási nyelv alapelemei

Adatok ábrázolása, adattípusok

Matematika 11. osztály

Adatbázisok I A relációs algebra

Algoritmusok Tervezése. 1. Előadás MATLAB 1. Dr. Bécsi Tamás

Bevezetés az informatikába Tételsor és minta zárthelyi dolgozat 2014/2015 I. félév

Java II. I A Java programozási nyelv alapelemei

Átírás:

Aritmetikai kifejezések lengyelformára hozása Készítették: Santák Csaba és Kovács Péter, 2005 ELTE IK programtervező matematikus szak

Aritmetikai kifejezések kiértékelése - Gyakran felmerülő programozási feladat, hogy egy adott aritmetikai kifejezést kell kiértékelni (kiszámolni). - A probléma nehézségét az okozza, hogy a kifejezések megszokott, természetes formája (az ún. infix írásmód, amikor az egyes műveleti jelek az operandusaik között helyezkednek el) nem egyértelmű és algoritmikusan nehezen kezelhető. - Az egyik legjobb és leghatékonyabb megoldási módszer az, hogy a kifejezést első lépésben átalakítjuk ún. lengyelformává, utána pedig azt értékeljük ki.

A lengyelforma - Łukasiewicz lengyel matematikus kidolgozta az aritmetikai formulák egy olyan átalakítási módját, amelynek segítségével a kiértékelés rendkívül egyszerűen és gyorsan megvalósítható. Ennek egy módosított változata terjedt el az informatikában. - Ebben az alakban a műveleti jelek az operandusaik után állnak, ezért postfix formának, illetve a szerző tiszteletére lengyelformának nevezik*. (Angol szakirodalomban: reverse Polish notation, RPN) * Megjegyezzük, hogy egy kifejezés lengyelformája megegyezik a kifejezésfa postorder bejárásával.

Példák - a+b ab+ - a+b*c abc*+ - a*b+(c-d)/2 ab*cd-2/+ - a+b+c*d/2-e*f ab+cd*2/+ef*- - x:=a+b xab+:= - x:=a*b^2 xab2^*:= -

A lengyelforma tulajdonságai Foglaljuk össze a lengyelfoma legfontosabb jellemzőit: - nincs benne zárójel, - az operandusok sorrendje ugyanaz, mint az eredeti kifejezésben, - a műveleti jelek sorrendje megegyezik a kifejezés helyes kiértékeléséhez szükséges elvégzési sorrendjükkel, - a műveleti jeleket közvetlenül megelőzik az operandusai (erre utal a postfix elnevezés). Ezek biztosítják, hogy egy lengyelformára hozott kifejezés kiértékelése könnyen elvégezhető legyen.

Aritmetikai kifejezések Az algoritmus tárgyalása előtt foglaljuk össze a szükséges fogalmakat és szabályokat. Műveletek precedenciái: Ebben a tárgyalásban hat műveletet tekintünk megengedettnek: a négy alapműveletet, a hatványozást és az értékadást. Ezek precedencia-szintjei legalacsonyabbig): - ^ (hatványozás) - *, / (szorzás, osztás) - +, - (összeadás, kivonás) - := (értékadás, definiáló egyenlőség*) a következők (a legmagasabbtól a * Több programozási nyelvhez hasonlóan megengedettnek tekintjük a többszörös értékadásokat is (pl. a:=b:=0).

Aritmetikai kifejezések Kifejezések kiértékelésekor figyelembe kell vennünk az egyes műveletek asszociativitási (zárójeleződési) szabályait is. 1. A négy alapművelet megegyezés szerint balról jobbra zárójeleződik: a+b+c ((a+b)+c) 2. A hatványozás és az értékadás megegyezés szerint jobbról balra zárójeleződik*: x^2^3 (x^(2^3)) = x^8 (Ha balról jobbra zárójeleznénk, akkor x^6-t kapnánk.) * Többszörös értékadás esetén a balról jobbra zárójeleződés nem is értelmezhető. Pl. a:=b:=1 (a:=b):=1 nem értelmezhető megfelelően, csak az a:=(b:=1).

A lengyelformára hozás feladata - Adott egy szintaktikusan helyes infix aritmetikai kifejezést tartalmazó szekvenciális input. Alakítsuk át lengyelformára. - Tegyük fel, hogy az input elemei nem karakterek, hanem a kifejezés egységei (lexikális elemei): operandus (változó, konstans stb.), operátor vagy zárójel; és minden elemről egyértelműen el tudjuk dönteni, hogy ezek közül melyik.

Lengyelformára hozás Az algoritmus során az inputot szekvenciálisan dolgozzuk fel, és egy (kezdetben üres) verem segítségével állítjuk elő a lengyelformát: Ha a kifejezésben a soron következő elem operandus, akkor azt kiírjuk a kimenetre (operandus tehát sosem kerül a verembe!). Ha nyitó zárójel következik, akkor azt a verembe dobjuk. Ha csukó zárójel következik, akkor sorban kivesszük a verem tetejéről az elemeket az első (legfelső) nyitó zárójelig, és kiírjuk őket a kimenetre, majd a nyitó zárójelet is kivesszük és eldobjuk (zárójelek tehát nem fognak megjelenni a kimeneten, és csukó zárójel sem kerül soha a verembe).

Lengyelformára hozás Ha operátor következik, akkor az első nála alacsonyabb (illetve jobbról balra zárójeleződő művelet esetén az első nem magasabb) precedenciájú operátorig, vagy az első nyitó zárójelig kivesszük a verem tetejéről az operátorokat, és kiírjuk a kimenetre. Végül a most olvasott operátort betesszük a verembe. Amikor az input végére érünk, a veremből az összes még benne lévő operátort kivesszük és kiírjuk a kimenetre.

Példa a+b+c*d/2-e*f Hozzuk lengyelformára az alábbi kifejezést: a+b+c*d/2-e*f Adjuk meg lépésről lépésre a verem tartalmát és a kimenetet. A verem kezdetben üres. Az első jel operandus, tehát kiírjuk a kimenetre. a

Példa a+b+c*d/2-e*f Operátor következik, tehát betesszük a verembe. a

Példa a+b+c*d/2-e*f Operandus következik, így kiírjuk a kimenetre. a b

Példa a+b+c*d/2-e*f Operátor következik. Mivel vele azonos precedenciájú operátor van a veremben, így azt kiírjuk a kimenetre, az új + jelet pedig betesszük a verembe. (Az összeadás ugyanis balról jobbra zárójeleződik.) a b +

Példa a+b+c*d/2-e*f Operandus következik, kiírjuk a kimenetre. a b + c

Példa a+b+c*d/2-e*f Operátor következik, ezért mivel magasabb precedenciájú a verem tetején lévő operátornál, betesszük a verembe. a b + c

Példa a+b+c*d/2-e*f Operandus következik, kiírjuk a kimenetre. a b + c d

Példa a+b+c*d/2-e*f Operátor következik. Mivel vele azonos precedenciájú operátor van a veremben, így azt kiírjuk a kimenetre, a most olvasott / jelet pedig betesszük a verembe. a b + c d *

Példa a+b+c*d/2-e*f Operandus következik, kiírjuk a kimenetre. a b + c d * 2

Példa a+b+c*d/2-e*f Operátor következik. Mivel a veremben egy nála magasabb, majd utána egy vele azonos precedenciájú operátor van, így azokat kiírjuk a kimenetre, a most olvasott - jelet pedig betesszük a verembe. a b + c d * 2 / +

Példa a+b+c*d/2-e*f Operandus következik, kiírjuk a kimenetre. a b + c d * 2 / + e

Példa a+b+c*d/2-e*f Operátor következik. Betesszük a verembe, mivel magasabb precedenciájú, mint a verem tetején lévő operátor. a b + c d * 2 / + e

Példa a+b+c*d/2-e*f Operandus következik, kiírjuk a kimenetre. a b + c d * 2 / + e f

Példa a+b+c*d/2-e*f A kifejezés végére értünk, a veremben lévő összes operátort kivesszük és kiírjuk a kimenetre. a b + c d * 2 / + e f * -

Az algoritmus struktogramja A korábbiakban megfogalmazott kikötések, egyszerűsítések mellett adjuk meg az algoritmus struktogramját is. Ehhez először is vezessünk be két segédfüggvényt, amelyek megadják egy operátor precedenciáját és zárójeleződésének irányát:

Az algoritmus struktogramja

Az algoritmus struktogramja Megjegyzés: A fenti elágazás két (szerkezetileg azonos) ága összevonható, ha egy bonyolultabb ciklusfeltételt írunk fel: IsEmpty(v) Top(v) "(" ( (zárójelezés(x) = balról precednecia(x) <= precedencia(top(v))) (zárójelezés(x) = jobbról precednecia(x) < precedencia(top(v))) )

Az algoritmus struktogramja Ha a precedencia függvényünket a nyitó zárójelre is értelmezzük oly módon, hogy annak a precedenciája legyen a legalacsonyabb (nulla), akkor az operator(x) ágban szereplő ciklusok feltételei leegyszerűsödnek:

További példák 1. x:=a+b^3^2 Hozzuk lengyelformára a fenti kifejezést, és nézzük meg minden lépésnél a verem tartalmát, illetve a lengyelforma kimenetének aktuális állását. A verem kezdetben üres.

1. x:=a+b^3^2 Operandus jön, tehát kiírjuk a kimenetre. A verem még mindig üres. x

1. x:=a+b^3^2 Operátor jön, berakjuk a verembe. x

1. x:=a+b^3^2 Operandus jön, tehát kiírjuk a kimenetre. x a

1. x:=a+b^3^2 Operátor jön, berakjuk a verembe a szabályoknak megfelelően. x a

1. x:=a+b^3^2 Operandus jön, tehát kiírjuk a kimenetre. x a b

1. x:=a+b^3^2 Operátor jön, berakjuk a verembe a szabályoknak megfelelően. x a b

1. x:=a+b^3^2 Operandus jön, tehát kiírjuk a kimenetre. x a b 3

1. x:=a+b^3^2 Operátor jön, berakjuk a verembe a szabályoknak megfelelően. x a b 3

1. x:=a+b^3^2 Operandus jön, tehát kiírjuk a kimenetre. x a b 3 2

1. x:=a+b^3^2 A kifejezés elfogyott, így kiírjuk a verem tartalmát a kimenetre. x a b 3 2 ^ ^ + := A verem kiürült.

2. (a+b)*(c-d) Hozzuk lengyelformára a fenti kifejezést. Nyitó zárójel az első jel, tehát betesszük a verembe. A verem tartalma:

2. (a+b)*(c-d) Operandus következik, tehát kiírjuk a kimenetre. a

2. (a+b)*(c-d) Operátor következik, tehát betesszük a verembe. a

2. (a+b)*(c-d) Operandus következik, tehát kiírjuk a kimenetre. a b

2. (a+b)*(c-d) Csukó zárójel következik, tehát a nyitózárójelig mindent kiírunk a veremből, a zárójelpárt eldobjuk. A verem újra üres lesz. a b +

2. (a+b)*(c-d) Operátor következik, tehát betesszük a verembe. a b +

2. (a+b)*(c-d) Nyitó zárójel következik, tehát betesszük a verembe. a b +

2. (a+b)*(c-d) Operandus következik, tehát kiírjuk a kimenetre. a b + c

2. (a+b)*(c-d) Operátor következik, tehát betesszük a verembe. a b + c

2. (a+b)*(c-d) Operandus következik, tehát kiírjuk a kimenetre. a b + c d

2. (a+b)*(c-d) Csukó zárójel következik, tehát a nyitózárójelig mindent kiírunk a veremből, a zárójelpárt eldobjuk. a b + c d -

2. (a+b)*(c-d) Végül ürítsük ki a vermet, mivel a kifejezés végére értünk. a b + c d - *

3. x:=(a+b)*c-(a+b)^2 Hozzuk lengyelformára a fenti kifejezést. Operandus következik, így kiírjuk a kimenetre. x

3. x:=(a+b)*c-(a+b)^2 Operátor következik, így betesszük a verembe. x

3. x:=(a+b)*c-(a+b)^2 Nyitó zárójel következik, így betesszük a verembe. x

3. x:=(a+b)*c-(a+b)^2 Operandus következik, így kiírjuk a kimenetre. x a

3. x:=(a+b)*c-(a+b)^2 Operátor következik, így betesszük a verembe. x a

3. x:=(a+b)*c-(a+b)^2 Operandus következik, így kiírjuk a kimenetre. x a b

3. x:=(a+b)*c-(a+b)^2 Csukó zárójel következik, így a nyitó zárójelig mindent kiürítünk a veremből, majd a zárójelpárt eldobjuk. x a b +

3. x:=(a+b)*c-(a+b)^2 Operátor következik, így betesszük a verembe. x a b +

3. x:=(a+b)*c-(a+b)^2 Operandus következik, így kiírjuk a kimenetre. x a b + c

3. x:=(a+b)*c-(a+b)^2 Operátor következik, mivel nála magasabb precedenciájú operátor van a veremben, azt kiírjuk, a - -t pedig betesszük a verembe. x a b + c *

3. x:=(a+b)*c-(a+b)^2 Nyitó zárójel következik, így betesszük a verembe. x a b + c *

3. x:=(a+b)*c-(a+b)^2 Operandus következik, így kiírjuk a kimenetre. x a b + c * a

3. x:=(a+b)*c-(a+b)^2 Operátor következik, így betesszük a verembe. x a b + c * a

3. x:=(a+b)*c-(a+b)^2 Operandus következik, így kiírjuk a kimenetre. x a b + c * a b

3. x:=(a+b)*c-(a+b)^2 Csukó zárójel következik, így a nyitó zárójelig mindent kiürítünk a veremből, majd a zárójelpárt eldobjuk. x a b + c * a b +

3. x:=(a+b)*c-(a+b)^2 Operátor következik, így betesszük a verembe. x a b + c * a b +

3. x:=(a+b)*c-(a+b)^2 Operandus következik, így kiírjuk a kimenetre. x a b + c * a b + 2

3. x:=(a+b)*c-(a+b)^2 A kifejezés végére értünk, így kiürítjük a vermet. x a b + c * a b + 2 ^ - :=

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Hozzuk lengyelformára a fenti kifejezést. Operandus következik, így kiírjuk a kimenetre. x

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Nyitó zárójel következik, így betesszük a verembe. x

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x a

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, a nála magasabb precedenciájú operátort kiírjuk, a + -t betesszük a verembe. x a b *

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Csukó zárójel következik, így kiírjuk a kimenetre a vermet a nyitó zárójelig, a zárójelpárt eldobjuk. x a b * 1 +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x a b * 1 +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) 2 db nyitó zárójel következik, így betesszük azokat a verembe. x a b * 1 +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x a b * 1 + x

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, és mivel jobbról-balra szabály van, a vele azonos precedenciájú operátort nem írjuk ki. Az operátort betesszük a verembe. x a b * 1 + x y

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, 2 db nála magasabb precedenciájú operátor van a veremben így azokat kiírjuk a kimenetre. A + operátort a verembe rakjuk. x a b * 1 + x y 2 ^ ^

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2 ^ ^ u

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, nincs vele egyenlő, illetve nála magasabb precedenciájú operátor a veremben, így betesszük a verembe. x a b * 1 + x y 2 ^ ^ u

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Nyitó zárójel következik, így betesszük a verembe. x a b * 1 + x y 2 ^ ^ u

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2 ^ ^ u v

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x a b * 1 + x y 2 ^ ^ u v

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2 ^ ^ u v 3

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Csukó zárójel következik, így kiírjuk a kimenetre a következő nyitó zárójelig az összes operátort, majd a zárójelpárt eldobjuk. x a b * 1 + x y 2 ^ ^ u v 3 -

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Szintén csukó zárójel következik, így kiírjuk a kimenetre a következő nyitó zárójelig az összes operátort, majd a zárójelpárt eldobjuk. x a b * 1 + x y 2 ^ ^ u v 3 - * +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x a b * 1 + x y 2 ^ ^ u v 3 - * +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Nyitó zárójel következik, így betesszük a verembe. x a b * 1 + x y 2 ^ ^ u v 3 - * +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2 ^ ^ u v 3 - * + f

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, így betesszük a verembe. x a b * 1 + x y 2 ^ ^ u v 3 - * + f

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2 ^ ^ u v 3 - * + f g

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operátor következik, mivel vele azonos precedenciájú operátor van a veremben, azt kiírjuk, a - -t pedig betesszük a verembe. x a b * 1 + x y 2 ^ ^ u v 3 - * + f g +

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) Operandus következik, így kiírjuk a kimenetre. x a b * 1 + x y 2 ^ ^ u v 3 - * + f g + 4

4. x:=(a*b+1)/((x^y^2+u*(v-3))*(f+g-4)) 2 db csukó zárójel következik, azután a kifejezésnek vége lesz, így lényegében mindent kiírunk a veremből, természetesen a zárójeleket eldobjuk. A végeredmény: x a b * 1 + x y 2 ^ ^ u v 3 - * + f g + 4 - * / :=