| | |
| | | #include <stdio.h> |
| | | #include <string.h> |
| | | |
| | | #include "scpi/lexer.h" |
| | | #include "lexer_private.h" |
| | | |
| | | /* identify character */ |
| | | static int isws(int c) { |
| | |
| | | } |
| | | } |
| | | |
| | | int SCPI_LexIsEos(lex_state_t * state) { |
| | | int lexIsEos(lex_state_t * state) { |
| | | return iseos(state); |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | /* tokens */ |
| | | int SCPI_LexWhiteSpace(lex_state_t * state, token_t * token) { |
| | | int lexWhiteSpace(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | skipWs(state); |
| | |
| | | } |
| | | } |
| | | |
| | | int SCPI_LexProgramHeader(lex_state_t * state, token_t * token) { |
| | | int lexProgramHeader(lex_state_t * state, token_t * token) { |
| | | int res; |
| | | token->ptr = state->pos; |
| | | token->type = TokUnknown; |
| | |
| | | } |
| | | |
| | | /* 7.7.1 <CHARACTER PROGRAM DATA> */ |
| | | int SCPI_LexCharacterProgramData(lex_state_t * state, token_t * token) { |
| | | int lexCharacterProgramData(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | if (!iseos(state) && isalpha(state->pos[0])) { |
| | |
| | | return someNumbers; |
| | | } |
| | | |
| | | int SCPI_LexDecimalNumericProgramData(lex_state_t * state, token_t * token) { |
| | | int lexDecimalNumericProgramData(lex_state_t * state, token_t * token) { |
| | | const char * rollback; |
| | | token->ptr = state->pos; |
| | | |
| | |
| | | } |
| | | |
| | | /* 7.7.3 <SUFFIX PROGRAM DATA> */ |
| | | int SCPI_LexSuffixProgramData(lex_state_t * state, token_t * token) { |
| | | int lexSuffixProgramData(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | skipChr(state, '/'); |
| | |
| | | return someNumbers; |
| | | } |
| | | |
| | | int SCPI_LexNondecimalNumericData(lex_state_t * state, token_t * token) { |
| | | int lexNondecimalNumericData(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | int someNumbers = 0; |
| | | if (skipChr(state, '#')) { |
| | |
| | | skipQuoteProgramData(state, '\''); |
| | | } |
| | | |
| | | int SCPI_LexStringProgramData(lex_state_t * state, token_t * token) { |
| | | int lexStringProgramData(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | if (!iseos(state)) { |
| | |
| | | return isdigit(c) && (c != '0'); |
| | | } |
| | | |
| | | int SCPI_LexArbitraryBlockProgramData(lex_state_t * state, token_t * token) { |
| | | int lexArbitraryBlockProgramData(lex_state_t * state, token_t * token) { |
| | | int i; |
| | | int j = 0; |
| | | const char * ptr = state->pos; |
| | |
| | | |
| | | // TODO: 7.7.7.2-2 recursive - any program data |
| | | |
| | | int SCPI_LexProgramExpression(lex_state_t * state, token_t * token) { |
| | | int lexProgramExpression(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | if (!iseos(state) && ischr(state, '(')) { |
| | |
| | | return token->len; |
| | | } |
| | | |
| | | int SCPI_LexComma(lex_state_t * state, token_t * token) { |
| | | int lexComma(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | if (skipChr(state, ',')) { |
| | |
| | | return token->len; |
| | | } |
| | | |
| | | int SCPI_LexSemicolon(lex_state_t * state, token_t * token) { |
| | | int lexSemicolon(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | if (skipChr(state, ';')) { |
| | |
| | | return token->len; |
| | | } |
| | | |
| | | int SCPI_LexNewLine(lex_state_t * state, token_t * token) { |
| | | int lexNewLine(lex_state_t * state, token_t * token) { |
| | | token->ptr = state->pos; |
| | | |
| | | skipChr(state, '\r'); |