ฉันกำลังทำงานผ่านอัลกอริทึม Shunting-yardดังที่วิกิพีเดียอธิบายไว้
คำอธิบายของอัลกอริทึมเมื่อจัดการกับตัวดำเนินการเป็นดังนี้:
ถ้าโทเค็นเป็นตัวดำเนินการ o1 ดังนั้น:
ในขณะที่มีโทเค็นของโอเปอเรเตอร์ o2 ที่ด้านบนสุดของโอเปอเรเตอร์สแต็กและอย่างใดอย่างหนึ่ง
o1 is left-associative and its precedence is less than or equal to that of o2, or o1 is right associative, and has precedence less than that of o2,
จากนั้นป๊อป o2 จากตัวดำเนินการสแต็กลงบนเอาต์พุตคิว
กด o1 ลงบนสแต็กโอเปอเรเตอร์
อย่างไรก็ตามพวกเขาให้ตัวอย่างต่อไปนี้:
การป้อนข้อมูล:
sin max 2 3 / 3 * 3.1415
เมื่ออัลกอริทึมเข้าสู่/
โทเค็นคำอธิบายของสิ่งที่ควรเกิดขึ้นมีดังนี้:
Token | Action | Output (in RPN) | Operator Stack
...
/ | Pop token to output | 2 3 max | / sin
...
พวกเขาจะ popping โทเค็นฟังก์ชั่นmax
ปิดและวางลงในstack
queue
ตามอัลกอริทึมของพวกเขาสิ่งนี้ดูเหมือนว่าหมายถึงโทเค็นของฟังก์ชั่นเป็นทั้งโอเปอเรเตอร์และมีความสำคัญน้อยกว่า/
โอเปอเรเตอร์
ไม่มีคำอธิบายว่ากรณีนี้เป็นจริงหรือไม่ ดังนั้นสำหรับShunting-yard
อัลกอริธึมความสำคัญของฟังก์ชั่นคืออะไร? ฟังก์ชั่นมีความสัมพันธ์ด้านซ้ายหรือขวา? หรือวิกิพีเดียไม่สมบูรณ์ / ไม่ถูกต้อง?
sin( max( 2 3) / 3 * 3.1415)