diff options
| author | Mistivia <i@mistivia.com> | 2025-06-20 18:12:25 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-06-20 18:12:25 +0800 |
| commit | 3cef9f993de2e0380c859d0e0ec88c07bfc3635f (patch) | |
| tree | 7f98824d36d545ed90dd4adc34a3e3d2c7cfc1ff /src/parser.c | |
| parent | ad580b3401deb4a41ee3a8f17824d136ee5cf38d (diff) | |
finish function
Diffstat (limited to 'src/parser.c')
| -rw-r--r-- | src/parser.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/src/parser.c b/src/parser.c index 46a94b5..45aeba6 100644 --- a/src/parser.c +++ b/src/parser.c @@ -140,6 +140,10 @@ ParseResult parse_sexp(Parser *parser) { return ParseErr(parser, "Unexpected EOF.\n"); } int next = Parser_peek(parser); + if (next == ')') { + Parser_getchar(parser); + return ParseErr(parser, "Invalid S-Expression.\n"); + } if (next == '(') { return parse_list(parser); } else if (next == ',') { @@ -335,7 +339,7 @@ static ParseResult parse_token(Parser *parser, const char *token) { if (endptr == token + len) return ParseOk(new_integer(parser->ctx, integer)); double real = strtod(token, &endptr); if (endptr == token + len) return ParseOk(new_real(parser->ctx, real)); - return ParseErr(parser, "Not a number : %s\n.", token); + return ParseErr(parser, "Not a number : %s.\n", token); } ParseResult parse_string(Parser *parser) { @@ -345,7 +349,7 @@ ParseResult parse_string(Parser *parser) { Parser_getchar(parser); while (Parser_peek(parser) != '"') { if (Parser_peek(parser) == EOF) { - return ParseErr(parser, "Unexpected EOF.\n."); + return ParseErr(parser, "Unexpected EOF.\n"); } if (Parser_peek(parser) == '\0') { ret = ParseErr(parser, "Unexpected zero terminator.\n"); |
