เครื่องมือจำลอง Finite State Machine (FSM) ออนไลน์
จำลอง FSM จากกฎ สถานะเริ่มต้น และสตริงอินพุต ดูเส้นทางและสถานะสุดท้าย
เริ่มใช้งาน
คุณสมบัติและตัวอย่างการใช้งาน
ตัวอย่างที่เป็นรูปธรรม
สมมติกฎ: q0,0,q0, q0,1,q1, q1,0,q0, q1,1,q1 สถานะเริ่มต้น q0 และอินพุต 1011 ผลลัพธ์ที่ได้คือเส้นทาง q0 -> q1 -> q0 -> q1 -> q1 และสถานะสุดท้าย q1
ปัญหาที่เครื่องมือช่วยแก้
คุณต้องการตรวจสอบว่าสตริงอินพุตใดทำให้เครื่องจักรไปถึงสถานะที่ต้องการหรือไม่ โดยไม่ต้องเขียนโปรแกรม เครื่องมือนี้จะจำลองการเปลี่ยนสถานะทีละตัวอักษรและแสดงผลทันที
ข้อจำกัดที่ควรทราบ
- รองรับเฉพาะการเปลี่ยนสถานะแบบกำหนดแน่นอน (deterministic) เท่านั้น ไม่มีสถานะยอมรับ (accepting state) หรือการเปลี่ยนแบบ epsilon
- กฎต้องมีจำนวน 1 ถึง 200 รายการ ชื่อสถานะต้องไม่เว้นว่างและยาวไม่เกิน 50 หน่วยรหัส UTF-16 อักขระนำเข้าต้องเป็นโค้ดพอยต์เดียว (Unicode code point)
- ห้ามมีกฎซ้ำสำหรับคู่ (สถานะ, อักขระ) เดียวกัน หากพบจะปฏิเสธกฎนั้น
- อินพุตถูกประมวลผลทีละโค้ดพอยต์ และจำกัดความยาวไม่เกิน 10,000 หน่วย UTF-16
- ไม่มีฟีเจอร์สร้างแผนภาพ แปลงเป็น regex หรือลดรูปเครื่องจักร
คำถามที่พบบ่อย
1. จะทราบได้อย่างไรว่าอินพุตได้รับการยอมรับหรือไม่?
เครื่องมือนี้ไม่มีสถานะยอมรับ ดังนั้นจึงไม่มีการตัดสินใจว่า 'ยอมรับ' หรือ 'ปฏิเสธ' เพียงแต่แสดงเส้นทางและสถานะสุดท้าย คุณต้องตีความผลลัพธ์เองตามวัตถุประสงค์
2. หากอินพุตมีอักขระที่ไม่ตรงกับกฎใด ๆ จะเกิดอะไรขึ้น?
การจำลองจะหยุดที่ตำแหน่งนั้นและแสดงข้อผิดพลาดทั่วไป โดยไม่ระบุอักขระ สถานะ หรือตำแหน่ง
3. สามารถใช้อักขระ Unicode เช่น อีโมจิ เป็นอักขระนำเข้าได้หรือไม่?
ได้ แต่ต้องเป็นโค้ดพอยต์เดียว (เช่น U+1F600) และต้องป้อนเป็นอักขระจริงในช่องอินพุต อย่างไรก็ตาม ระบบอาจไม่แสดงผลอีโมจิในบางสภาพแวดล้อม แต่การจำลองจะยังทำงานถูกต้อง
ข้อควรระวัง
สำหรับอินพุตที่ยาวมาก เส้นทางผลลัพธ์อาจยาวมาก ควรทดสอบกับอินพุตสั้น ๆ ก่อน และตรวจสอบกฎแต่ละบรรทัดให้ถูกต้อง
ชื่อสถานะและสถานะเริ่มต้นยาวได้ไม่เกิน 50 หน่วยรหัส UTF-16 ส่วนอินพุตไม่เกิน 10000 หน่วย ระบบตัดช่องว่างหัวท้ายฟิลด์กฎ จึงใช้ช่องว่างล้วนเป็นสัญลักษณ์ไม่ได้ ป้อนสถานะเริ่มต้นให้ตรงทั้งตัวพิมพ์เล็กใหญ่และไม่เติมช่องว่างหัวท้าย อินพุตว่างจะคงสถานะเริ่มต้นไว้ หากขาดการเปลี่ยนสถานะจะแสดงข้อผิดพลาดทั่วไป ไม่ระบุตำแหน่งหรือเส้นทางบางส่วน
การประมวลผลเกิดขึ้นภายในเบราว์เซอร์ของคุณ