nancy.liao
2025-05-08 bf8143c649292042de87c0cef63e6cb3c523388f
libscpi/src/lexer.c
@@ -313,11 +313,10 @@
        }
    }
    if (iseos(state)) {
        return (state->pos - startPos) * SKIP_INCOMPLETE;
    } else {
        return (state->pos - startPos) * SKIP_OK;
    }
    ptrdiff_t diff = state->pos - startPos;
    long long result = diff * (iseos(state) ? SKIP_INCOMPLETE : SKIP_OK);
    return (int)result;
}
/* tokens */
@@ -341,7 +340,9 @@
        token->type = SCPI_TOKEN_UNKNOWN;
    }
    return token->len;
   return token->len;
}
/* 7.6.1 <COMMAND PROGRAM HEADER> */
@@ -403,12 +404,28 @@
 * @param token
 * @return 
 */
 /*识别和分类SCPI命令头
    公共命令头 以*识别  如  *IDN?
    复合命令头 以:识别 如  SYSTem:ERRor?
    命令查询  以?识别
    普通命令:MEAS:VOLT
    查询命令:MEAS:VOLT?
    @param state 词法解析器
    @param token 用于存储解析结果的token
    @return 返回解析结果的长度
 */
int scpiLex_ProgramHeader(lex_state_t * state, scpi_token_t * token) {
     // 记录起始位置 并且初始化类型
    int res;
    token->ptr = state->pos;
    token->type = SCPI_TOKEN_UNKNOWN;
    res = skipCommonProgramHeader(state);
    // 解析到公共命令头后检查查询符
    if (res >= SKIP_OK) {
        if (skipChr(state, '?') >= SKIP_OK) {
            token->type = SCPI_TOKEN_COMMON_QUERY_PROGRAM_HEADER;
@@ -418,6 +435,8 @@
    } else if (res <= SKIP_INCOMPLETE) {
        token->type = SCPI_TOKEN_INCOMPLETE_COMMON_PROGRAM_HEADER;
    } else if (res == SKIP_NONE) {
         // 解析到复合命令后检查查询符
        res = skipCompoundProgramHeader(state);
        if (res >= SKIP_OK) {
@@ -430,7 +449,7 @@
            token->type = SCPI_TOKEN_INCOMPLETE_COMPOUND_PROGRAM_HEADER;
        }
    }
    // 计算长度
    if (token->type != SCPI_TOKEN_UNKNOWN) {
        token->len = state->pos - token->ptr;
    } else {