AAL BORG TI CK إلى ck a utomata vali d ator - محرك التحقق القابل للتمديد ومحاكاة لعلامة TOCK Automata.
تعد TTA's (TICK TOCK Automata) نظرية قائمة على الأوتوماتا يمكنها تصميم منطق الأعمال الموازي لجميع أنواع أنظمة الأتمتة. يتكون TTA من مجموعة من المواقع والتحولات بينهما. يمكن حراسة كل انتقال من خلال تعبير منطقي ولديه مجموعة من المهام المتغيرة كـ "نتيجة" لأخذ الانتقال.
القياس الجيد لـ TTA هو statemachine ، حيث يمكن للنظام الانتقال من ولاية إلى أخرى. فيما يلي مثال على TTA بسيط يتحكم في ضوء استنادًا إلى إدخال زر.
بدءًا من الموقع الإيقاف ، لا يوجد سوى حافة صادرة واحدة مع الحارس الذي يتحقق إذا كان btn_is_pressed صحيحًا . إذا كان الأمر كذلك ، فإننا ننتقل إلى الموقع على ON ونضع light المتغير على صواب كنتيجة لأخذ الحافة/الانتقال. بعد ذلك ، عند إصدار الزر ، نعود إلى Off Locaiton ويتم ضبط light على False مرة أخرى.
ما يجعل TTAs مختلفًا عن أي نظام انتقالي آخر هو أن المتغير btn_is_pressed هو متغير خارجي ، مما يعني أنه لا يمكن تعيينه لأي قيمة من قبل نظام الانتقال ، يمكن أن يتغير فقط بناءً على إدخال خارجي. تتم قراءة المدخلات الخارجية عندما لا نأخذ التحولات. هذا الانقسام من الدلالات هو المكان الذي يأتي فيه اسم علامة Tock Automata من:
أخذ بناء الجملة خطوة واحدة إلى الأمام ، يمكن أن يكون لديك العديد من هذه TTAs تعمل بشكل متوازٍ ، وتشارك نفس مجموعة المتغيرات الداخلية والخارجية. تسمى هذه الشبكة ببساطة n et et ick t ock a utomata (NTTA).
تم بناء Aaltitoad باستخدام Cmake. يجب أن يكون لديك برنامج مترجم متوافق مع C ++ 20 ، flex ، bison الإصدار 3.5+ ومكتبة القالب القياسية المثبتة. يتم التعامل مع جميع التبعيات الأخرى من خلال مدير حزمة CPM الرائع.
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make إذا كانت خطوة CPM تستغرق وقتًا طويلاً ، فحاول إعادة التشغيل باستخدام -DCPM_SOURCE_CACHE=~/.cache/CPM
لتشغيل اختبارات الوحدة ، قم بتجميع هدف aaltitoad_tests
mkdir build-test && cd build-test
cmake -DCMAKE_BUILD_TYPE=Debug ..
make aaltitoad_tests
# run the tests
./aaltitoad_test -r xml -d yes --order lex إذا كنت ترغب في تضمين إحصائيات تغطية التعليمات البرمجية ، فوفر -DCODE_COVERAGE=ON علامة cmake.
يوفر Aaltitoad ثلاثة أهداف تجميع أولية. تحتوي جميع واجهات سطر الأوامر على صفحة مساعدة يمكنك استدعاءها مع وسيطة --help .
verifier : واجهة سطر أوامر محرك التحققsimulator : واجهة سطر أوامر وقت التشغيلaaltitoad : مكتبة مع كل الأشياء aaltitoad يدعم Aaltitoad مكتبات طرف ثالث "Tucker" ، بحيث يمكنك ضخ عمليات التكامل المخصصة مباشرة في وقت التشغيل. يوفر هذا المستودع مثالاً على توكير يسمى pipe_tocker في دليل tocker_plugins لتكون بمثابة مشروع مثال. يجب أن يحدد "Tocker" الرموز التالية:
# include < plugin_system.h > // aaltitoad::* typedefs
extern " C " {
const char * get_plugin_name (); // Return value of this func dictates the name the next two funcs
aaltitoad:: tocker_t * create_TOCKER_NAME ( const std::string& argument, const aaltitoad:: ntta_t & ntta);
void destroy_TOCKER_NAME ( tocker_t * tocker);
plugin_type get_plugin_type () {
return plugin_type::tocker;
}
} يشير TOCKER_NAME إلى السلسلة C التي توفرها وظيفة get_plugin_name . يجب أن تتطابق أسماء الوظائف ، وإلا فلن يتم تحميل البرنامج المساعد. يجب أن تربط المكونات الإضافية Tocker مع مكتبة aaltitoad المشتركة ، ويجب تجميعها كمكتبة مشتركة ، مثل ذلك:
add_library (TOCKER_NAME_tocker SHARED *.cpp)
target_link_libraries (TOCKER_NAME_tocker aaltitoad) بمجرد تجميعها ، يمكنك إنشاء إنشاء Tocker من خلال توفير --tocker / -t مع --tocker-dir / -T إلى سطر أوامر Aaltitoad. يجب توفير خيار --tocker مثل ذلك:
--tocker-dir /path/to/tocker-plugins --tocker " TOCKER_NAME(argument string) " يشير "argument string" -جزء من الخيار إلى سلسلة وسيطة الإدخال المقدمة إلى وظيفة create_TOCKER_NAME . الآن يجب أن يتم إنشاء مثيل له ، وسيتم استدعاء وظيفة tock في كل مرة تكون TTA جاهزة لحساب قيم Tocker.
هناك نوعان من واجهات Tocker التي يمكن أن يمتدها طرف ثالث:
tocker_t )async_tocker_t ) سيتم تشغيل Tucker الحظر في سلسلة رسائل واحدة وسيقوم بمنع جميع التنفيذ حتى الانتهاء من TOCK ، ويجب أن يتجاوز تكامل الطرف الثالث وظيفة tock فقط. على النقيض من ذلك ، فإن Tocker غير المتزامن لن يمنع تنفيذ القراد ، ولكنه يبدأ مهمة جديدة غير متزامنة لوظيفة get_tock_values .
عند تنفيذ Tocker الخاص بك ، يجب أن تفكر إذا كنت ترغب في منع TTA من التنفيذ أم لا. إذا اخترت تنفيذ Tocker غير المتزامن ، فكن على دراية بأن بيئة الإدخال يمكن أن تتغير منذ إصدار TOCK.
إذا كنت لا ترغب في استخدام المحلل المحلل ، فيمكنك دائمًا تزويدك. طالما أنك تقدم الرموز التالية (تذكر extern "C" ):
# include < plugin_system.h > // aaltitoad::* typedefs
extern " C " {
const char * get_plugin_name ();
const char * get_plugin_version ();
aaltitoad:: ntta_t * load ( const std::vector<std::string>& folders, const std::vector<std::string>& ignore_list);
plugin_type get_plugin_type () {
return plugin_type::parser;
}
} لتسهيل بناء كائن aaltitoad::ntta_t ، نقدم بعض فئات البناء: aaltitoad::tta_builder و aaltitoad::ntta_builder