int runline(char* line, int* pc) { tokeniser_setup(line); token = tokeniser_next(); switch (token) { case TOK_PRINT:// STRING|EXPR (, STRING|EXPR) do { token = tokeniser_next(); if (token == TOK_EOL || token == TOK_ERR) { break; } if (token == TOK_STRING) { printf("%s ", tokeniser_string()); token = tokeniser_next(); } else { printf("%d ", parseexpression()); } if (token != TOK_COMMA && token != TOK_EOL) { printf("expected ','\n"); return 0; } } while (token != TOK_EOL && token != TOK_ERR); printf("\n"); break; case TOK_LET:// VAR = EXPR token = tokeniser_next(); if (token != TOK_VAR) { printf("expected variable name\n"); return 0; } char* varName = tokeniser_string(); token = tokeniser_next(); if (token != TOK_EQ) { printf("expected = after variable name\n"); return 0; } token = tokeniser_next(); int val = parseexpression(); if (token == TOK_ERR) { return 0; } setvariable(varName, token); break; } (*pc)++; return 1; }
int assignment(char *p) { char *var, *qval; int n; if(!isalpha(p[0])) return 0; for(var=p; isalnum(*p); p++) ; n = p-var; while(*p==' ' || *p=='\t') p++; if(*p++ != '=') return 0; while(*p==' ' || *p=='\t') p++; qval = expand(nil, p, nil); setvariable(var, n, p, qval); return 1; }