aal borg ti ck ck ck a unotomata vali d ator-可擴展的驗證引擎和tick tock automata的模擬器。
TTA的(TICK TOCK Automata)是一種基於自動機理論,可以為各種自動化系統建模並行業務邏輯。 TTA由它們之間的一組位置和過渡組成。每個過渡都可以通過布爾表達來保護,並具有一組變量分配,作為進行過渡的“結果”。
與TTA的一個很好的類比是一種明確的,系統可以從一個狀態過渡到另一種狀態。下面是一個簡單的TTA的示例,該示例基於按鈕輸入控制光線。
從關閉位置開始,只有一個外向的邊緣可以檢查btn_is_pressed是否為真。如果是這樣,我們將轉移到ON位置,並將可變light設置為真實,這是由於進行邊緣/過渡。然後,當釋放按鈕時,我們返回到Off Locaiton,並將light再次設置為False 。
使TTA與任何其他過渡系統不同的是, btn_is_pressed變量是外部變量,這意味著它不能通過過渡系統將其分配給任何值,它只能基於外部輸入來更改。當我們不進行過渡時,讀取外部輸入。語義的這種劃分是tick tick tock automata的名稱來源:
將語法更進一步,您可以並行運行許多這些TTA,共享同一內部和外部變量池。這樣的網絡被稱為t ock a utomata(ntta)的n ntwork。
AALTITOAD是使用CMAKE構建的。您必須具有C ++ 20兼容的編譯器, flex , bison +版本和已安裝的標準模板庫。所有其他依賴關係都是通過出色的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 :帶有所有內容的圖書館AaltitoadAALTITOAD支持第三方“ Tocker”庫,因此您可以將自定義集成直接注入運行時。該存儲庫在tocker_plugins目錄中提供了一個名為pipe_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是指get_plugin_name函數提供的C弦。函數名稱必須匹配,否則插件將不加載。 Tocker插件必須與aaltitoad共享庫鏈接,並且應作為共享庫彙編,例如:
add_library (TOCKER_NAME_tocker SHARED *.cpp)
target_link_libraries (TOCKER_NAME_tocker aaltitoad)編譯後,您可以通過將--tocker / -t與--tocker-dir / -T一起在AALTITOAD命令行中實例化tocker。應該像這樣提供--tocker選項:
--tocker-dir /path/to/tocker-plugins --tocker " TOCKER_NAME(argument string) " 選項的"argument string" - 指的是提供給create_TOCKER_NAME函數的輸入參數字符串。現在,您的Tockers應該已經實例化,每次TTA準備計算TTA時, tock都會被調用。
第三方Tocker可以擴展兩種類型的Tocker接口:
tocker_t )async_tocker_t )阻止Tocker將以一個線程運行,並將阻止所有tick執行,直到TOCK完成為止,第三方集成只能覆蓋tock功能。相比之下,異步托克不會阻止tick執行,而是啟動get_tock_values函數的新異步任務。
在實施托克時,應考慮是否要阻止TTA執行。如果您選擇實現異步托克,請注意,自發行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