22
ตัวแยกวิเคราะห์สมการ (นิพจน์) ที่มีลำดับความสำคัญ?
ฉันได้พัฒนาตัวแยกวิเคราะห์สมการโดยใช้อัลกอริธึมสแต็กแบบง่ายที่จะจัดการตัวดำเนินการไบนารี (+, -, |, &, *, / ฯลฯ ) ตัวดำเนินการยูนารี (!) และวงเล็บ อย่างไรก็ตามการใช้วิธีนี้ทำให้ทุกอย่างมีลำดับความสำคัญเหมือนกันโดยจะประเมินจากซ้ายไปขวาโดยไม่คำนึงถึงตัวดำเนินการแม้ว่าจะบังคับใช้ลำดับความสำคัญได้โดยใช้วงเล็บก็ตาม ตอนนี้ "1 + 11 * 5" จะคืนค่า 60 ไม่ใช่ 56 อย่างที่คาดไว้ แม้ว่าสิ่งนี้จะเหมาะกับโครงการปัจจุบัน แต่ฉันต้องการมีกิจวัตรวัตถุประสงค์ทั่วไปที่สามารถใช้สำหรับโครงการในภายหลังได้ แก้ไขเพื่อความชัดเจน: อัลกอริทึมที่ดีสำหรับการแยกวิเคราะห์สมการที่มีลำดับความสำคัญคืออะไร? ฉันสนใจสิ่งที่ง่ายในการติดตั้งและเข้าใจว่าฉันสามารถเขียนโค้ดด้วยตัวเองเพื่อหลีกเลี่ยงปัญหาการออกใบอนุญาตกับโค้ดที่มี ไวยากรณ์: ฉันไม่เข้าใจคำถามไวยากรณ์ - ฉันเขียนด้วยมือ ง่ายพอที่ฉันไม่เห็นความจำเป็นสำหรับ YACC หรือ Bison ฉันแค่ต้องคำนวณสตริงด้วยสมการเช่น "2 + 3 * (42/13)" ภาษา: ฉันกำลังทำสิ่งนี้ในภาษา C แต่ฉันสนใจอัลกอริทึมไม่ใช่วิธีแก้ปัญหาเฉพาะภาษา C อยู่ในระดับต่ำพอที่จะแปลงเป็นภาษาอื่นได้ง่ายหากจำเป็น ตัวอย่างรหัส …