| | |
| | | * @param chr |
| | | * @return |
| | | */ |
| | | static int skipChr(lex_state_t * state, int chr) { |
| | | static int skipChr(lex_state_t * state, char chr) { |
| | | if (!iseos(state) && ischr(state, chr)) { |
| | | state->pos++; |
| | | return SKIP_OK; |
| | |
| | | * @return |
| | | */ |
| | | int scpiLex_DecimalNumericProgramData(lex_state_t * state, scpi_token_t * token) { |
| | | const char * rollback; |
| | | char * rollback; |
| | | token->ptr = state->pos; |
| | | |
| | | if (skipMantisa(state)) { |
| | |
| | | * @return |
| | | */ |
| | | int scpiLex_NondecimalNumericData(lex_state_t * state, scpi_token_t * token) { |
| | | token->ptr = state->pos; |
| | | int someNumbers = 0; |
| | | token->ptr = state->pos; |
| | | if (skipChr(state, '#')) { |
| | | if (!iseos(state)) { |
| | | if (isH(state->pos[0])) { |
| | |
| | | return (c >= 0) && (c <= 0x7f); |
| | | } |
| | | |
| | | static int skipQuoteProgramData(lex_state_t * state, int quote) { |
| | | static void skipQuoteProgramData(lex_state_t * state, char quote) { |
| | | while (!iseos(state)) { |
| | | if (isascii7bit(state->pos[0]) && !ischr(state, quote)) { |
| | | state->pos++; |
| | |
| | | } |
| | | } |
| | | |
| | | static int skipDoubleQuoteProgramData(lex_state_t * state) { |
| | | static void skipDoubleQuoteProgramData(lex_state_t * state) { |
| | | skipQuoteProgramData(state, '"'); |
| | | } |
| | | |
| | | static int skipSingleQuoteProgramData(lex_state_t * state) { |
| | | static void skipSingleQuoteProgramData(lex_state_t * state) { |
| | | skipQuoteProgramData(state, '\''); |
| | | } |
| | | |
| | |
| | | token->len = state->pos - token->ptr; |
| | | |
| | | if ((token->len > 0)) { |
| | | token->ptr++; |
| | | token->len -= 2; |
| | | //token->ptr++; |
| | | //token->len -= 2; |
| | | } else { |
| | | token->type = SCPI_TOKEN_UNKNOWN; |
| | | state->pos = token->ptr; |
| | | token->len = 0; |
| | | } |
| | | |
| | | return token->len > 0 ? token->len + 2 : 0; |
| | | return token->len > 0 ? token->len : 0; |
| | | } |
| | | |
| | | /* 7.7.6 <ARBITRARY BLOCK PROGRAM DATA> */ |
| | |
| | | int i; |
| | | int arbitraryBlockLength = 0; |
| | | const char * ptr = state->pos; |
| | | token->ptr = state->pos; |
| | | int validData = -1; |
| | | token->ptr = state->pos; |
| | | |
| | | if (skipChr(state, '#')) { |
| | | if (!iseos(state) && isNonzeroDigit(state->pos[0])) { |
| | |
| | | /* 7.7.7 <EXPRESSION PROGRAM DATA> */ |
| | | static int isProgramExpression(int c) { |
| | | if ((c >= 0x20) && (c <= 0x7e)) { |
| | | if ((c != 0x22) |
| | | && (c != 0x23) |
| | | && (c != 0x27) |
| | | && (c != 0x28) |
| | | && (c != 0x29) |
| | | && (c != 0x3B)) { |
| | | if ((c != '"') |
| | | && (c != '#') |
| | | && (c != '\'') |
| | | && (c != '(') |
| | | && (c != ')') |
| | | && (c != ';')) { |
| | | return 1; |
| | | } |
| | | } |