การเขียนนิพจน์คณิตศาสตร์ (Notation)
นิพจน์คณิตศาสตร์เขียนได้ 3 รูปแบบที่เทียบเท่ากัน:
- Infix (ปกติ)
- Prefix
- Postfix
Prefix Notation (Polish Notation)
Operator อยู่หน้า Operands เช่น +ab เทียบเท่า Infix a + b
Postfix Notation (Reverse Polish Notation)
Operator อยู่หลัง Operands เช่น ab+ เทียบเท่า Infix a + b
ตารางเปรียบเทียบ
| Expression | Infix | Prefix | Postfix |
|---|---|---|---|
| 1 | a + b | + a b | a b + |
| 2 | (a + b) * c | * + a b c | a b + c * |
| 3 | a * (b + c) | * a + b c | a b c + * |
| 4 | a / b + c / d | + / a b / c d | a b / c d / + |
| 5 | (a + b) * (c + d) | * + a b + c d | a b + c d + * |
| 6 | ((a + b) * c) - d | - * + a b c d | a b + c * d - |
การ Parse นิพจน์
Infix ยากต่อการ Parse โดยตรง แปลงเป็น Prefix/Postfix ก่อนแล้วค่อยคำนวณ ต้องคำนึงถึง Operator Precedence และ Associativity
Precedence (ลำดับความสำคัญ)
เมื่อ Operand อยู่ระหว่าง Operator 2 ตัว ใครทำงานก่อน ขึ้นกับ Precedence
a + b * c → a + (b * c)
คูณมี Precedence สูงกว่าบวก ดังนั้น b*c ทำก่อน