diff --git a/src/parser.c b/src/parser.c index 093414c..ced4ccb 100644 --- a/src/parser.c +++ b/src/parser.c @@ -1,6 +1,7 @@ #include "parser.h" #include #include +#include #include #include #include @@ -32,6 +33,17 @@ char *read_entire_file(char *path) { return buffer; } +static FILE *open_parser_file(const char *path, const char *kind) { + FILE *file = fopen(path, "r"); + if (file == NULL) { + fprintf(stderr, "\x1B[31m[ERROR]\033[0m Problem with opening %s file by %s path: %s\n", kind, path, + strerror(errno)); + exit(EXIT_FAILURE); + } + + return file; +} + size_t get_text_lines(char *text, char ***lines_arg) { size_t lines_count = 0; size_t capacity = 1024; @@ -376,7 +388,7 @@ ParserResult parser(config_row config_i) { SymbolList list = symbol_list_create(); // printf("Process grammar..."); - FILE *grammar_file = fopen(config_grammar, "r"); + FILE *grammar_file = open_parser_file(config_grammar, "grammar"); Grammar _grammar = process_grammar(grammar_file, &list); grammar_swap_symbols(&_grammar, 0, _grammar.start_nonterm); symbol_list_swap(&list, 0, _grammar.start_nonterm); @@ -384,7 +396,7 @@ ParserResult parser(config_row config_i) { // printf("OK\n"); // printf("Process graph..."); - FILE *graph_file = fopen(config_graph, "r"); + FILE *graph_file = open_parser_file(config_graph, "graph"); Graph graph = process_graph(graph_file, &list); // printf("OK\n");