mrk/include/mrk/parser.h

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