هل استخدام آلة الحالة المحدودة تصميم جيد لتحليل النص العام؟

StackOverflow https://stackoverflow.com/questions/2776430

سؤال

أقرأ ملفًا مليئًا بأرقام Hex. لا بد لي من تحديد نمط معين ، قل "Aaad" (بدون اقتباسات) منه. في كل مرة أرى النمط ، أقوم بإنشاء بعض البيانات إلى ملفات أخرى.

ستكون هذه حالة شائعة جدًا في تصميم البرامج - التحليل والبحث عن نمط معين.

لقد صممتها ك آلة الدولة المحدودة ومنظمته منظمة في C باستخدام switch-case لتغيير الدول. كان هذا هو التنفيذ الأول الذي حدث لي.

  • التصميم: هل هناك بعض التصميمات الأفضل ممكنة؟
  • تطبيق: هل ترى بعض المشكلات في استخدام حالة التبديل كما ذكرت؟
هل كانت مفيدة؟

المحلول

يمكن أن تعمل FSM التي يتم لفها يدويًا بشكل جيد في المواقف البسيطة ، لكنها تميل إلى أن تصبح غير عملية مع نمو عدد الحالات والمدخلات.

ربما لا يوجد سبب لتغيير ما قمت بتصميمه/تنفيذه بالفعل ، ولكن إذا كنت مهتمًا بتقنيات تحليل النصوص العامة للأغراض العامة ، فربما يجب أن تنظر إلى أشياء مثل التعبيرات العادية والمرنة والبيسون و ANTLR.

نصائح أخرى

لحالات بسيطة محرجة زوجين من ifأو switch'es كافية. لتحليل سلسلة على أنظمة Posix ، رجل ريجكس (3). لاستخدام تحليل الملفات بأكمله (مثل التكوينات المعقدة) ليكس/ثني و YACC/الثور.

عند الكتابة في C ++ ، انظر إلى تعزيز regex لحالة أبسط و تعزيز الروح لأكثر تعقيدًا. Flex & Bison تعمل مع C ++ أيضًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top