هل استخدام آلة الحالة المحدودة تصميم جيد لتحليل النص العام؟
-
03-10-2019 - |
سؤال
أقرأ ملفًا مليئًا بأرقام Hex. لا بد لي من تحديد نمط معين ، قل "Aaad" (بدون اقتباسات) منه. في كل مرة أرى النمط ، أقوم بإنشاء بعض البيانات إلى ملفات أخرى.
ستكون هذه حالة شائعة جدًا في تصميم البرامج - التحليل والبحث عن نمط معين.
لقد صممتها ك آلة الدولة المحدودة ومنظمته منظمة في C باستخدام switch-case
لتغيير الدول. كان هذا هو التنفيذ الأول الذي حدث لي.
- التصميم: هل هناك بعض التصميمات الأفضل ممكنة؟
- تطبيق: هل ترى بعض المشكلات في استخدام حالة التبديل كما ذكرت؟
المحلول
يمكن أن تعمل FSM التي يتم لفها يدويًا بشكل جيد في المواقف البسيطة ، لكنها تميل إلى أن تصبح غير عملية مع نمو عدد الحالات والمدخلات.
ربما لا يوجد سبب لتغيير ما قمت بتصميمه/تنفيذه بالفعل ، ولكن إذا كنت مهتمًا بتقنيات تحليل النصوص العامة للأغراض العامة ، فربما يجب أن تنظر إلى أشياء مثل التعبيرات العادية والمرنة والبيسون و ANTLR.
نصائح أخرى
لحالات بسيطة محرجة زوجين من if
أو switch
'es كافية. لتحليل سلسلة على أنظمة Posix ، رجل ريجكس (3). لاستخدام تحليل الملفات بأكمله (مثل التكوينات المعقدة) ليكس/ثني و YACC/الثور.
عند الكتابة في C ++ ، انظر إلى تعزيز regex لحالة أبسط و تعزيز الروح لأكثر تعقيدًا. Flex & Bison تعمل مع C ++ أيضًا.