Stack (Part 2 : Evakuasi Ekspresi Aritmatika)
Desain System December 23rd, 2008Sebelumnya telah dibahas disini tentang postfix dan infix. Sekarang kita akan membahas cara membaca rumus postfix dan cara mengubah rumus infix ke posix.
Membaca postfix
Aturannya adalah :
- Notasi dibaca dari kiri ke kanan
- Jika ditemukan OPERAND, disimpan dalam stack
- Jika ditemukan OPERATOR (+,-,*,/) , kompiler akan mengambil 2 OPERAND terakhir dari stack tadi (POP) dan hasilnya disimpan kembali ke stack
Contoh rumus postfix : ABC*+
| No | Stack | Proses | |
| 1 | A | A | Operand, simpan ke stack |
| 2 | B | A,B | Operand, simpan ke stack |
| 3 | C | A,B,C | Operand, simpan ke stack |
| 4 | * | A,D | Operator *, POP 2 operand (B & C) lalu kalikan. Hasilnya (D) simpan kembali ke stack |
| 5 | + | E | Operator +, POP 2 operand (A,D) lalu jumlahkan. Hasilnya (E) simpan kembali ke stack |
Mengubah infix ke postfix
Aturannya adalah :
- Tentukan derajat masing-masing operator
Contoh : * dan / = 2, + dan - = 1, kurung buka ‘(’ = 0 - Untuk OPERAND, langsung tulis sebagai OUTPUT
- ‘(’, langsung push ke stack
- ‘)’, POP dan tulis ke output semua isi stack sampai pasangannya kurung buka ‘(’. Untuk ‘(’ dan ‘)’ tidak usah ditulis ke output
- Operator 1 : Jika stack kosong atau derajat operator yang baru lebih tinggi dari operator sebelumnya di stack, masukkan operator ke stack (PUSH)
- Operator 2 : Jika derajat operator di stack yang baru lebih rendah atau sama dengan operator sebelumnya, maka pindah operator sebelumnya tersebut ke output (POP). Lalu bandingkan lagi operator yang baru tersebut dengan operator sebelumnya. Jika derajatnya lebih tinggi atau stack dalam keaadaan kosong, PUSH ke stack (Mbulet yah)
Contoh rumus infix : A + B * C. Ubahlah ke rumus postfix
| No | Stack | Output | Proses | |
| 1 | A | A | Operand, langsung output | |
| 2 | + | + | A | Operator, langsung PUSH ke stack |
| 3 | B | + | AB | Operand, langsung output |
| 4 | * | +,* | AB | Operator, karena derajat * (2) lebih tinggi dari + (1), langsung PUSH ke stack |
| 5 | C | +,* | ABC | Operand, langsung output |
| 6 | + | ABC* | POP stack ke output | |
| 7 | ABC*+ | POP stack ke output |
Contoh rumus infix : A*(B-C)+D. Ubahlah ke bentuk postfix
| No | Stack | Output | Proses | |
| 1 | A | A | Operand, langsung output | |
| 2 | * | * | A | Operator, langsung PUSH ke stack |
| 3 | ( | *( | A | ‘(’ Langsung push ke stack |
| 4 | B | *( | AB | Operand, langsung output |
| 5 | - | *(- | AB | Operator, langsung push ke stack |
| 6 | C | *(- | ABC | Operand, langsung output |
| 7 | ) | * | ABC- | ‘)’, semua operator yang diapit tanda ini dioutput kan |
| 8 | + | + | ABC-* | Derajat operator + (1) lebih rendah dari * (2). Maka * dioutputkan (POP). Kemudian, karena stack kosong, maka + di PUSH ke stack |
| 9 | D | + | ABC-*D | Operand, langsung output |
| 10 | ABC-*D+ | Operator dari stack, di pop ke output |
Leave a Reply
You must be logged in to post a comment.