From 11f2f2e329ef404d0e9c022cb2f9fbbb45bae285 Mon Sep 17 00:00:00 2001 From: nancy.liao <huihui.liao@greentest.com.cn> Date: 周日, 27 4月 2025 17:33:31 +0800 Subject: [PATCH] 完成了SCPI命令语法分析器的完整规则 --- libscpi/src/utils.c | 105 ---------------------------------------------------- 1 files changed, 0 insertions(+), 105 deletions(-) diff --git a/libscpi/src/utils.c b/libscpi/src/utils.c index bdde1ea..17d057c 100644 --- a/libscpi/src/utils.c +++ b/libscpi/src/utils.c @@ -1144,108 +1144,3 @@ ((val & 0x00FF000000000000ull) >> 40) | ((val & 0xFF00000000000000ull) >> 56); } - -int parse_pattern(const char* pattern, Segment segments[], int max_segments) { - int seg_count = 0; - const char* p = pattern; - - while (*p && seg_count < max_segments) - { - if (*p == '[') - { - // 澶勭悊鍙彉娈� - segments[seg_count].is_variable = TRUE; - // 璺宠繃'[' - p++; - - int i = 0; - while (*p && *p != ']' && i < sizeof(segments[seg_count].text)-1) - { - segments[seg_count].text[i++] = toupper(*p++); - } - segments[seg_count].text[i] = '\0'; - - if (*p == ']') - { - // 璺宠繃']' - p++; - } - } - else - { - // 澶勭悊鍥哄畾娈� - segments[seg_count].is_variable = FALSE; - - int i = 0; - while (*p && *p != '[' && i < sizeof(segments[seg_count].text)-1) - { - segments[seg_count].text[i++] = toupper(*p++); - } - segments[seg_count].text[i] = '\0'; - } - - seg_count++; - } - - return seg_count; -} - -// 鍖归厤鍛戒护涓庢ā寮� -bool match_command(const char* command, Segment segments[], int seg_count) -{ - const char* cmd = command; - int current_seg = 0; - - while (*cmd && current_seg < seg_count) - { - // 璺宠繃鍛戒护涓殑鍒嗛殧绗︼紙鍐掑彿锛� - if (*cmd == ':') - { - cmd++; - // 妯″紡涓篃搴旇鏈夊搴旂殑鍒嗛殧绗� - if (segments[current_seg].text[0] != ':') - { - return FALSE; - } - continue; - } - - // 鑾峰彇褰撳墠娈甸暱搴� - size_t seg_len = strlen(segments[current_seg].text); - - if (segments[current_seg].is_variable) - { - // 鍙彉娈� - 璺宠繃瀵瑰簲闀垮害鐨勫瓧绗� - int i = 0; - while (*cmd && *cmd != ':' && i < seg_len) - { - cmd++; - i++; - } - } else - { - // 鍥哄畾娈� - 蹇呴』绮剧‘鍖归厤 - if (strncasecmp(cmd, segments[current_seg].text, seg_len) != 0) - { - return FALSE; - } - cmd += seg_len; - } - - current_seg++; - } - - // 妫�鏌ユ槸鍚﹀鐞嗗畬鎵�鏈夊懡浠ゅ拰鎵�鏈夋 - return (*cmd == '\0') && (current_seg == seg_count); -} - -// 娴嬭瘯鍑芥暟 -bool test_match(const char* pattern, const char* command) -{ - Segment segments[16]; - int seg_count = parse_pattern(pattern, segments, 16); - return (match_command(command, segments, seg_count)); - -} - - -- Gitblit v1.9.1