in interpreters/minibasic/basic.c [3291:3578]
static int gettoken(FAR const char *str)
{
while (isspace(*str))
{
str++;
}
if (isdigit(*str))
{
return VALUE;
}
switch (*str)
{
case 0:
return EOS;
case '\n':
return EOL;
case '/':
return DIV;
case '*':
return MULT;
case '(':
return OPAREN;
case ')':
return CPAREN;
case '+':
return PLUS;
case '-':
return MINUS;
case '!':
return SHRIEK;
case ',':
return COMMA;
case ';':
return SEMICOLON;
case '"':
return QUOTE;
case '=':
return EQUALS;
case '<':
return LESS;
case '>':
return GREATER;
default:
if (!strncmp(str, "e", 1) && !isalnum(str[1]))
{
return E;
}
if (isupper(*str))
{
if (!strncmp(str, "SIN", 3) && !isalnum(str[3]))
{
return SIN;
}
if (!strncmp(str, "COS", 3) && !isalnum(str[3]))
{
return COS;
}
if (!strncmp(str, "TAN", 3) && !isalnum(str[3]))
{
return TAN;
}
if (!strncmp(str, "LN", 2) && !isalnum(str[2]))
{
return LN;
}
if (!strncmp(str, "POW", 3) && !isalnum(str[3]))
{
return POW;
}
if (!strncmp(str, "PI", 2) && !isalnum(str[2]))
{
return PI;
}
if (!strncmp(str, "SQRT", 4) && !isalnum(str[4]))
{
return SQRT;
}
if (!strncmp(str, "PRINT", 5) && !isalnum(str[5]))
{
return PRINT;
}
if (!strncmp(str, "LET", 3) && !isalnum(str[3]))
{
return LET;
}
if (!strncmp(str, "DIM", 3) && !isalnum(str[3]))
{
return DIM;
}
if (!strncmp(str, "IF", 2) && !isalnum(str[2]))
{
return IF;
}
if (!strncmp(str, "THEN", 4) && !isalnum(str[4]))
{
return THEN;
}
if (!strncmp(str, "AND", 3) && !isalnum(str[3]))
{
return AND;
}
if (!strncmp(str, "OR", 2) && !isalnum(str[2]))
{
return OR;
}
if (!strncmp(str, "GOTO", 4) && !isalnum(str[4]))
{
return GOTO;
}
if (!strncmp(str, "INPUT", 5) && !isalnum(str[5]))
{
return INPUT;
}
if (!strncmp(str, "REM", 3) && !isalnum(str[3]))
{
return REM;
}
if (!strncmp(str, "FOR", 3) && !isalnum(str[3]))
{
return FOR;
}
if (!strncmp(str, "TO", 2) && !isalnum(str[2]))
{
return TO;
}
if (!strncmp(str, "NEXT", 4) && !isalnum(str[4]))
{
return NEXT;
}
if (!strncmp(str, "STEP", 4) && !isalnum(str[4]))
{
return STEP;
}
if (!strncmp(str, "MOD", 3) && !isalnum(str[3]))
{
return MOD;
}
if (!strncmp(str, "ABS", 3) && !isalnum(str[3]))
{
return ABS;
}
if (!strncmp(str, "LEN", 3) && !isalnum(str[3]))
{
return LEN;
}
if (!strncmp(str, "ASCII", 5) && !isalnum(str[5]))
{
return ASCII;
}
if (!strncmp(str, "ASIN", 4) && !isalnum(str[4]))
{
return ASIN;
}
if (!strncmp(str, "ACOS", 4) && !isalnum(str[4]))
{
return ACOS;
}
if (!strncmp(str, "ATAN", 4) && !isalnum(str[4]))
{
return ATAN;
}
if (!strncmp(str, "INT", 3) && !isalnum(str[3]))
{
return INT;
}
if (!strncmp(str, "RND", 3) && !isalnum(str[3]))
{
return RND;
}
if (!strncmp(str, "VAL", 3) && !isalnum(str[3]))
{
return VAL;
}
if (!strncmp(str, "VALLEN", 6) && !isalnum(str[6]))
{
return VALLEN;
}
if (!strncmp(str, "INSTR", 5) && !isalnum(str[5]))
{
return INSTR;
}
if (!strncmp(str, "CHR$", 4))
{
return CHRSTRING;
}
if (!strncmp(str, "STR$", 4))
{
return STRSTRING;
}
if (!strncmp(str, "LEFT$", 5))
{
return LEFTSTRING;
}
if (!strncmp(str, "RIGHT$", 6))
{
return RIGHTSTRING;
}
if (!strncmp(str, "MID$", 4))
{
return MIDSTRING;
}
if (!strncmp(str, "STRING$", 7))
{
return STRINGSTRING;
}
}
/* end isupper() */
if (isalpha(*str))
{
while (isalnum(*str))
{
str++;
}
switch (*str)
{
case '$':
return str[1] == '(' ? DIMSTRID : STRID;
case '(':
return DIMFLTID;
default:
return FLTID;
}
}
return SYNTAX_ERROR;
}
}