54 lines
1.4 KiB
C
54 lines
1.4 KiB
C
#ifndef PARSER_H
|
|
#define PARSER_H
|
|
|
|
#include "tree.h"
|
|
#include "lex.h"
|
|
|
|
/**
|
|
* @brief Syntaktický analyzátor (parser)
|
|
*/
|
|
struct parser {
|
|
struct lexer lexer;
|
|
struct error_buffer eb;
|
|
};
|
|
|
|
/**
|
|
* @brief Zpracuje n výrazů ze vstupního řetězce
|
|
*
|
|
* @param parser Parser
|
|
* @param str Vstupní řetězec
|
|
* @param variable_name Název proměnné
|
|
* @param out_nodes Adresa na pole, kam budou adresy kořenových uzlů výrazů uloženy
|
|
* @param n Počet výrazů
|
|
*
|
|
* @return 1 při úspěchu, 0 při chybě
|
|
*/
|
|
int parser_parse_n(struct parser *parser, const char *str, const char *variable_name, struct expr_node **out_nodes, size_t n);
|
|
|
|
/**
|
|
* @brief Zpracuje jeden výraz ze vstupního řetězce
|
|
*
|
|
* @param parser Parser
|
|
* @param str Vstupní řetězec
|
|
* @param variable_name Název proměnné
|
|
* @return Adresa kořenového uzlu výrazu
|
|
*/
|
|
struct expr_node *parser_parse(struct parser *parser, const char *str, const char *variable_name);
|
|
|
|
/**
|
|
* @brief Vrátí kód chyby nastalé během syntaktické analýzy
|
|
*
|
|
* @param parser Parser
|
|
* @return Chybový kód
|
|
*/
|
|
enum error_code parser_get_error(const struct parser *parser);
|
|
|
|
/**
|
|
* @brief Vrátí textovou reprezentaci chyby nastalé během syntaktické analýzy
|
|
*
|
|
* @param parser Parser
|
|
* @return Řetězec obsahující text chyby
|
|
*/
|
|
const char *parser_get_error_text(const struct parser *parser);
|
|
|
|
#endif /* PARSER_H */ |