39 lines
905 B
C
39 lines
905 B
C
#ifndef MRK_PARSER
|
|
#define MRK_PARSER
|
|
|
|
#include "mrk/ast.h"
|
|
#include "mrk/common.h"
|
|
#include "mrk/lexer.h"
|
|
|
|
#define MRK_MAX_HEADER_LEN 6
|
|
|
|
typedef struct mrk_parser mrk_parser;
|
|
|
|
typedef enum mrk_parser_err {
|
|
mrk_parser_err_ok = 0,
|
|
mrk_parser_err_unexpected_token,
|
|
mrk_parser_unclosed_brackets,
|
|
} mrk_parser_err;
|
|
|
|
/**
|
|
* Initialize a new parser struct.
|
|
*/
|
|
mrk_err mrk_parser_init(mrk_parser **out);
|
|
|
|
void mrk_parser_open(mrk_parser *parser, mrk_lexer *lexer);
|
|
|
|
mrk_err mrk_parser_parse(mrk_ast_node **out, mrk_parser *parser);
|
|
|
|
/**
|
|
* Return the error code of the last parser method that returned `invalid_md`.
|
|
*/
|
|
mrk_parser_err mrk_parser_err_code(mrk_parser *parser);
|
|
|
|
/**
|
|
* Return a nul-terminated string containing a textual description of the last
|
|
* error. The string is managed internally and shoul not be freed by the caller.
|
|
*/
|
|
const char *mrk_parser_err_msg(mrk_parser *parser);
|
|
|
|
#endif
|