feat(parser): better error messages
parent
2dfbf8a986
commit
7227e953ae
|
@ -37,7 +37,21 @@ int main(int argc, char **argv) {
|
||||||
mrk_parser_open(parser, lexer);
|
mrk_parser_open(parser, lexer);
|
||||||
|
|
||||||
mrk_ast_node *root;
|
mrk_ast_node *root;
|
||||||
assert(mrk_parser_parse(&root, parser) == mrk_err_ok);
|
mrk_err res = mrk_parser_parse(&root, parser);
|
||||||
|
|
||||||
|
switch (res) {
|
||||||
|
case mrk_err_ok:
|
||||||
|
break;
|
||||||
|
case mrk_err_invalid_md: {
|
||||||
|
const char *err_msg = mrk_parser_err_msg(parser);
|
||||||
|
printf("%s\n", err_msg);
|
||||||
|
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
printf("mrk error %i\n", res);
|
||||||
|
return 3;
|
||||||
|
}
|
||||||
|
|
||||||
char *html;
|
char *html;
|
||||||
assert(mrk_ast_to_html(&html, buf, root) == mrk_err_ok);
|
assert(mrk_ast_to_html(&html, buf, root) == mrk_err_ok);
|
||||||
|
|
|
@ -44,6 +44,8 @@ typedef enum mrk_token_type {
|
||||||
mrk_token_type_list_item_unchecked,
|
mrk_token_type_list_item_unchecked,
|
||||||
} mrk_token_type;
|
} mrk_token_type;
|
||||||
|
|
||||||
|
extern const char *mrk_token_type_names[];
|
||||||
|
|
||||||
typedef struct mrk_token {
|
typedef struct mrk_token {
|
||||||
mrk_token_type type;
|
mrk_token_type type;
|
||||||
size_t start;
|
size_t start;
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
#include "mrk/lexer.h"
|
||||||
|
|
||||||
|
const char *mrk_token_type_names[] = {
|
||||||
|
"",
|
||||||
|
"backtick",
|
||||||
|
"triple backtick",
|
||||||
|
"underscore",
|
||||||
|
"double underscore",
|
||||||
|
"star",
|
||||||
|
"double star",
|
||||||
|
"newline",
|
||||||
|
"blank line",
|
||||||
|
"line break",
|
||||||
|
"right angle brackets",
|
||||||
|
"left bracket",
|
||||||
|
"right bracket",
|
||||||
|
"left parenthesis",
|
||||||
|
"right parenthesis",
|
||||||
|
"bang",
|
||||||
|
"backslash",
|
||||||
|
"text",
|
||||||
|
"header start",
|
||||||
|
"horizontal rule",
|
||||||
|
"indent",
|
||||||
|
"unordered list item",
|
||||||
|
"ordered list item",
|
||||||
|
"checked box",
|
||||||
|
"unchecked box",
|
||||||
|
};
|
|
@ -15,21 +15,27 @@ const char *mrk_parser_err_msg(mrk_parser *parser) {
|
||||||
parser->error.buf[0] = '\0';
|
parser->error.buf[0] = '\0';
|
||||||
break;
|
break;
|
||||||
case mrk_parser_err_unexpected_token:
|
case mrk_parser_err_unexpected_token:
|
||||||
sprintf(parser->error.buf, "%lu:%lu: unexpected token type %i",
|
sprintf(parser->error.buf, "%lu:%lu: unexpected token type '%s' (%i)",
|
||||||
parser->error.token.start_line,
|
parser->error.token.start_line + 1,
|
||||||
parser->error.token.start_line_index, parser->error.token.type);
|
parser->error.token.start_line_index + 1,
|
||||||
|
mrk_token_type_names[parser->error.token.type],
|
||||||
|
parser->error.token.type);
|
||||||
break;
|
break;
|
||||||
case mrk_parser_err_unexpected_eat:
|
case mrk_parser_err_unexpected_eat:
|
||||||
sprintf(parser->error.buf,
|
sprintf(
|
||||||
"%lu:%lu: unexpected token, expected type %i but got %i",
|
parser->error.buf,
|
||||||
parser->error.token.start_line,
|
"%lu:%lu: unexpected token, expected type '%s' (%i) but got '%s' (%i)",
|
||||||
parser->error.token.start_line_index,
|
parser->error.token.start_line + 1,
|
||||||
parser->error.expected_token_type, parser->error.token.type);
|
parser->error.token.start_line_index + 1,
|
||||||
|
mrk_token_type_names[parser->error.expected_token_type],
|
||||||
|
parser->error.expected_token_type,
|
||||||
|
mrk_token_type_names[parser->error.token.type],
|
||||||
|
parser->error.token.type);
|
||||||
break;
|
break;
|
||||||
case mrk_parser_unclosed_brackets:
|
case mrk_parser_unclosed_brackets:
|
||||||
sprintf(parser->error.buf, "%lu:%lu: unclosed bracket",
|
sprintf(parser->error.buf, "%lu:%lu: unclosed bracket",
|
||||||
parser->error.token.start_line,
|
parser->error.token.start_line + 1,
|
||||||
parser->error.token.start_line_index);
|
parser->error.token.start_line_index + 1);
|
||||||
break;
|
break;
|
||||||
case mrk_parser_unexpected_path:
|
case mrk_parser_unexpected_path:
|
||||||
return unexpected_path_msg;
|
return unexpected_path_msg;
|
||||||
|
|
Loading…
Reference in New Issue