/* CharToken - get a character constant */ static int CharToken(ParseContext *c) { int ch = LiteralChar(c); if (XGetC(c) != '\'') ParseError(c,"Expecting a closing single quote"); c->token[0] = ch; c->token[1] = '\0'; c->value = ch; return T_NUMBER; }
/* StringToken - get a string */ static int StringToken(ParseContext *c) { int ch,len; char *p; /* collect the string */ p = c->token; len = 0; while ((ch = XGetC(c)) != EOF && ch != '"') { if (++len > MAXTOKEN) ParseError(c, "String too long"); *p++ = (ch == '\\' ? LiteralChar(c) : ch); } *p = '\0'; /* check for premature end of file */ if (ch != '"') ParseError(c, "unterminated string"); /* return the token */ return T_STRING; }