Return token from nextToken again
This commit is contained in:
58
src/test.cpp
58
src/test.cpp
@@ -500,8 +500,8 @@ private:
|
|||||||
|
|
||||||
typedef PRESERVE_NONE bool (*continuation)(Parser2 *);
|
typedef PRESERVE_NONE bool (*continuation)(Parser2 *);
|
||||||
|
|
||||||
[[maybe_unused]] void printStack() {
|
[[maybe_unused]] void debugPrint(Symbol token) {
|
||||||
printf("token: %s\n", symbolNames[currentToken]);
|
printf("token: %s\n", symbolNames[token]);
|
||||||
for (int i = 0; i < stackPtr - stack; ++i) {
|
for (int i = 0; i < stackPtr - stack; ++i) {
|
||||||
printf("%s ", symbolNames[stack[i]]);
|
printf("%s ", symbolNames[stack[i]]);
|
||||||
}
|
}
|
||||||
@@ -514,13 +514,13 @@ private:
|
|||||||
}
|
}
|
||||||
|
|
||||||
PRESERVE_NONE static bool keepGoing(Parser2 *self) {
|
PRESERVE_NONE static bool keepGoing(Parser2 *self) {
|
||||||
// self->printStack();
|
|
||||||
if (self->empty()) {
|
if (self->empty()) {
|
||||||
assert(self->currentToken == T_EOF);
|
assert(self->currentToken == T_EOF);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
self->nextToken();
|
auto token = self->nextToken();
|
||||||
MUSTTAIL return table[*(self->stackPtr - 1)][self->currentToken](self);
|
// self->debugPrint(token);
|
||||||
|
MUSTTAIL return table[*(self->stackPtr - 1)][token](self);
|
||||||
}
|
}
|
||||||
|
|
||||||
PRESERVE_NONE static bool reject(Parser2 *self) {
|
PRESERVE_NONE static bool reject(Parser2 *self) {
|
||||||
@@ -781,71 +781,55 @@ private:
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
Symbol currentToken;
|
|
||||||
const char *bufBefore;
|
const char *bufBefore;
|
||||||
void nextToken() {
|
Symbol nextToken() {
|
||||||
maybeSkipWs();
|
maybeSkipWs();
|
||||||
bufBefore = buf;
|
bufBefore = buf;
|
||||||
if (len == 0) {
|
if (len == 0) {
|
||||||
currentToken = T_EOF;
|
return T_EOF;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (*buf == '{') {
|
if (*buf == '{') {
|
||||||
parseLiteral("{");
|
parseLiteral("{");
|
||||||
currentToken = T_LBRACE;
|
return T_LBRACE;
|
||||||
return;
|
|
||||||
} else if (*buf == '[') {
|
} else if (*buf == '[') {
|
||||||
parseLiteral("[");
|
parseLiteral("[");
|
||||||
currentToken = T_LBRACKET;
|
return T_LBRACKET;
|
||||||
return;
|
|
||||||
} else if (*buf == '}') {
|
} else if (*buf == '}') {
|
||||||
parseLiteral("}");
|
parseLiteral("}");
|
||||||
currentToken = T_RBRACE;
|
return T_RBRACE;
|
||||||
return;
|
|
||||||
} else if (*buf == ']') {
|
} else if (*buf == ']') {
|
||||||
parseLiteral("]");
|
parseLiteral("]");
|
||||||
currentToken = T_RBRACKET;
|
return T_RBRACKET;
|
||||||
return;
|
|
||||||
} else if (*buf == ':') {
|
} else if (*buf == ':') {
|
||||||
parseLiteral(":");
|
parseLiteral(":");
|
||||||
currentToken = T_COLON;
|
return T_COLON;
|
||||||
return;
|
|
||||||
} else if (*buf == ',') {
|
} else if (*buf == ',') {
|
||||||
parseLiteral(",");
|
parseLiteral(",");
|
||||||
currentToken = T_COMMA;
|
return T_COMMA;
|
||||||
return;
|
|
||||||
} else if (*buf == '"') {
|
} else if (*buf == '"') {
|
||||||
if (!parse_string()) {
|
if (!parse_string()) {
|
||||||
currentToken = T_INVALID;
|
return T_INVALID;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
currentToken = T_STRING;
|
return T_STRING;
|
||||||
return;
|
|
||||||
} else if (*buf == 't') {
|
} else if (*buf == 't') {
|
||||||
if (!parseLiteral("true")) {
|
if (!parseLiteral("true")) {
|
||||||
currentToken = T_INVALID;
|
return T_INVALID;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
currentToken = T_ATOM;
|
return T_ATOM;
|
||||||
return;
|
|
||||||
} else if (*buf == 'f') {
|
} else if (*buf == 'f') {
|
||||||
if (!parseLiteral("false")) {
|
if (!parseLiteral("false")) {
|
||||||
currentToken = T_INVALID;
|
return T_INVALID;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} else if (*buf == 'n') {
|
} else if (*buf == 'n') {
|
||||||
if (!parseLiteral("null")) {
|
if (!parseLiteral("null")) {
|
||||||
currentToken = T_INVALID;
|
return T_INVALID;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!parse_number()) {
|
if (!parse_number()) {
|
||||||
currentToken = T_INVALID;
|
return T_INVALID;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
currentToken = T_ATOM;
|
return T_ATOM;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|||||||
Reference in New Issue
Block a user