komentare parseru
This commit is contained in:
parent
242bcb851d
commit
6bd390736c
10
parser.c
10
parser.c
@ -43,6 +43,7 @@ static void error_bad_alloc(struct parser *parser) {
|
|||||||
error_printf(&parser->eb, "Out of memory\n");
|
error_printf(&parser->eb, "Out of memory\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Vyhodí chybu při neočekávaném tokenu */
|
||||||
static void error_expected_tokens(struct parser *parser, size_t num_tokens, ...) {
|
static void error_expected_tokens(struct parser *parser, size_t num_tokens, ...) {
|
||||||
size_t i;
|
size_t i;
|
||||||
va_list ap;
|
va_list ap;
|
||||||
@ -51,7 +52,7 @@ static void error_expected_tokens(struct parser *parser, size_t num_tokens, ...)
|
|||||||
|
|
||||||
if (got == TOK_ERROR) {
|
if (got == TOK_ERROR) {
|
||||||
error_set(&parser->eb, lex_get_error(&parser->lexer));
|
error_set(&parser->eb, lex_get_error(&parser->lexer));
|
||||||
error_printf(&parser->eb, "Lexer error - %s", lex_get_error_text(&parser->lexer));
|
error_printf(&parser->eb, "%s", lex_get_error_text(&parser->lexer));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -77,6 +78,7 @@ static void error_expected_tokens(struct parser *parser, size_t num_tokens, ...)
|
|||||||
static struct expr_node* parse_expression(struct parser *parser);
|
static struct expr_node* parse_expression(struct parser *parser);
|
||||||
static int parse_n_expressions(struct parser *parser, struct expr_node **out_nodes, size_t n);
|
static int parse_n_expressions(struct parser *parser, struct expr_node **out_nodes, size_t n);
|
||||||
|
|
||||||
|
/* Zpracuje výraz obalený závorkami */
|
||||||
static struct expr_node* parse_bracketed(struct parser *parser) {
|
static struct expr_node* parse_bracketed(struct parser *parser) {
|
||||||
struct expr_node* node;
|
struct expr_node* node;
|
||||||
|
|
||||||
@ -97,6 +99,7 @@ static struct expr_node* parse_bracketed(struct parser *parser) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Zpracuje část výrazu, která už má nejvyšší precedenci (číselnou konstantu, proměnnou, funkci, nebo výraz obalený závorkami) */
|
||||||
static struct expr_node *parse_factor(struct parser *parser) {
|
static struct expr_node *parse_factor(struct parser *parser) {
|
||||||
struct expr_node *node;
|
struct expr_node *node;
|
||||||
|
|
||||||
@ -163,6 +166,7 @@ static struct expr_node *parse_factor(struct parser *parser) {
|
|||||||
|
|
||||||
static struct expr_node *parse_unary(struct parser *parser);
|
static struct expr_node *parse_unary(struct parser *parser);
|
||||||
|
|
||||||
|
/* Zpracuje umocnění */
|
||||||
static struct expr_node *parse_power(struct parser *parser) {
|
static struct expr_node *parse_power(struct parser *parser) {
|
||||||
struct expr_node* node, * new_node, * inner;
|
struct expr_node* node, * new_node, * inner;
|
||||||
|
|
||||||
@ -188,6 +192,7 @@ static struct expr_node *parse_power(struct parser *parser) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Zpracuje unární mínus, resp. plus */
|
||||||
static struct expr_node* parse_unary(struct parser *parser) {
|
static struct expr_node* parse_unary(struct parser *parser) {
|
||||||
if (accept_token(parser, TOK_MINUS)) {
|
if (accept_token(parser, TOK_MINUS)) {
|
||||||
struct expr_node *node, *inner;
|
struct expr_node *node, *inner;
|
||||||
@ -208,6 +213,7 @@ static struct expr_node* parse_unary(struct parser *parser) {
|
|||||||
return parse_power(parser);
|
return parse_power(parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Zpracuje součin nebo dělení */
|
||||||
static struct expr_node *parse_term(struct parser *parser) {
|
static struct expr_node *parse_term(struct parser *parser) {
|
||||||
struct expr_node *node, *new_node, *inner;
|
struct expr_node *node, *new_node, *inner;
|
||||||
|
|
||||||
@ -242,6 +248,7 @@ static struct expr_node *parse_term(struct parser *parser) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Zpracuje sčítání nebo odečítání */
|
||||||
static struct expr_node *parse_expression(struct parser *parser) {
|
static struct expr_node *parse_expression(struct parser *parser) {
|
||||||
struct expr_node *node, *new_node, *inner;
|
struct expr_node *node, *new_node, *inner;
|
||||||
|
|
||||||
@ -276,6 +283,7 @@ static struct expr_node *parse_expression(struct parser *parser) {
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Zpracuje n výrazů */
|
||||||
static int parse_n_expressions(struct parser *parser, struct expr_node **out_nodes, size_t n) {
|
static int parse_n_expressions(struct parser *parser, struct expr_node **out_nodes, size_t n) {
|
||||||
size_t i;
|
size_t i;
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user