fix(parser): adapting to new lexer
This commit is contained in:
parent
bf929d413f
commit
d5a1ec3ca6
1 changed files with 19 additions and 19 deletions
|
|
@ -56,7 +56,7 @@ static bool is_end_of_list(struct token *token)
|
|||
|
||||
struct ast *parse_input(struct lexer_context *ctx)
|
||||
{
|
||||
return parse_list();
|
||||
return parse_list(ctx);
|
||||
}
|
||||
|
||||
struct ast *parse_list(struct lexer_context *ctx)
|
||||
|
|
@ -79,7 +79,7 @@ struct ast *parse_list(struct lexer_context *ctx)
|
|||
token = POP_TOKEN();
|
||||
if (!isterminator(token)) // Follow(list)
|
||||
{
|
||||
current_node = parse_and_or();
|
||||
current_node = parse_and_or(ctx);
|
||||
if (current_node == NULL)
|
||||
{
|
||||
// TODO free list
|
||||
|
|
@ -97,12 +97,12 @@ struct ast *parse_list(struct lexer_context *ctx)
|
|||
|
||||
struct ast *parse_and_or(struct lexer_context *ctx)
|
||||
{
|
||||
return parse_pipeline();
|
||||
return parse_pipeline(ctx);
|
||||
}
|
||||
|
||||
struct ast *parse_pipeline(struct lexer_context *ctx)
|
||||
{
|
||||
return parse_command();
|
||||
return parse_command(ctx);
|
||||
}
|
||||
|
||||
struct ast *parse_command(struct lexer_context *ctx)
|
||||
|
|
@ -111,11 +111,11 @@ struct ast *parse_command(struct lexer_context *ctx)
|
|||
|
||||
if (token->type == TOKEN_WORD)
|
||||
{
|
||||
return parse_simple_command();
|
||||
return parse_simple_command(ctx);
|
||||
}
|
||||
else if (token->type == TOKEN_IF)
|
||||
{
|
||||
return parse_shell_command();
|
||||
return parse_shell_command(ctx);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -135,7 +135,7 @@ struct ast *parse_simple_command(struct lexer_context *ctx)
|
|||
|
||||
while (token->type == TOKEN_WORD)
|
||||
{
|
||||
token = pop_token();
|
||||
token = pop_token(ctx);
|
||||
if (token == NULL)
|
||||
{
|
||||
// TODO free
|
||||
|
|
@ -150,7 +150,7 @@ struct ast *parse_simple_command(struct lexer_context *ctx)
|
|||
return NULL;
|
||||
}
|
||||
command_elements = list_append(command_elements, word);
|
||||
token = peek_token();
|
||||
token = peek_token(ctx);
|
||||
if (token == NULL)
|
||||
{
|
||||
// TODO free
|
||||
|
|
@ -168,7 +168,7 @@ struct ast *parse_simple_command(struct lexer_context *ctx)
|
|||
|
||||
struct ast *parse_shell_command(struct lexer_context *ctx)
|
||||
{
|
||||
return parse_if_rule();
|
||||
return parse_if_rule(ctx);
|
||||
}
|
||||
|
||||
struct ast *parse_if_rule(struct lexer_context *ctx)
|
||||
|
|
@ -183,7 +183,7 @@ struct ast *parse_if_rule(struct lexer_context *ctx)
|
|||
}
|
||||
|
||||
// Condition content
|
||||
struct ast *condition_content = parse_compound_list();
|
||||
struct ast *condition_content = parse_compound_list(ctx);
|
||||
|
||||
// Then keyword
|
||||
token = POP_TOKEN();
|
||||
|
|
@ -195,7 +195,7 @@ struct ast *parse_if_rule(struct lexer_context *ctx)
|
|||
}
|
||||
|
||||
// Then content
|
||||
struct ast *then_content = parse_compound_list();
|
||||
struct ast *then_content = parse_compound_list(ctx);
|
||||
if (then_content == NULL)
|
||||
{
|
||||
ast_free(&condition_content);
|
||||
|
|
@ -204,7 +204,7 @@ struct ast *parse_if_rule(struct lexer_context *ctx)
|
|||
}
|
||||
|
||||
// Eventual else/elif clause(s)
|
||||
struct ast *else_content = parse_else_clause();
|
||||
struct ast *else_content = parse_else_clause(ctx);
|
||||
if (else_content == NULL)
|
||||
{
|
||||
ast_free(&condition_content);
|
||||
|
|
@ -249,7 +249,7 @@ struct ast *parse_compound_list(struct lexer_context *ctx)
|
|||
}
|
||||
|
||||
// and_or
|
||||
current_cmd = parse_and_or();
|
||||
current_cmd = parse_and_or(ctx);
|
||||
if (current_cmd == NULL)
|
||||
return NULL;
|
||||
list_append(result_list, current_cmd);
|
||||
|
|
@ -267,7 +267,7 @@ struct ast *parse_compound_list(struct lexer_context *ctx)
|
|||
}
|
||||
|
||||
// and_or
|
||||
current_cmd = parse_and_or();
|
||||
current_cmd = parse_and_or(ctx);
|
||||
if (current_cmd == NULL)
|
||||
return NULL;
|
||||
list_append(result_list, current_cmd);
|
||||
|
|
@ -300,7 +300,7 @@ struct ast *parse_else_clause(struct lexer_context *ctx)
|
|||
{
|
||||
// Condition
|
||||
token = POP_TOKEN();
|
||||
struct ast *condition = parse_compound_list();
|
||||
struct ast *condition = parse_compound_list(ctx);
|
||||
|
||||
// 'then'
|
||||
token = POP_TOKEN();
|
||||
|
|
@ -311,14 +311,14 @@ struct ast *parse_else_clause(struct lexer_context *ctx)
|
|||
}
|
||||
|
||||
// Then clause
|
||||
struct ast *then_content = parse_compound_list();
|
||||
struct ast *then_content = parse_compound_list(ctx);
|
||||
|
||||
// Eventual else clause (recursive)
|
||||
struct ast *else_content = NULL;
|
||||
token = PEEK_TOKEN();
|
||||
if (token->type == TOKEN_ELSE || token->type == TOKEN_ELIF)
|
||||
{
|
||||
else_content = parse_else_clause();
|
||||
else_content = parse_else_clause(ctx);
|
||||
}
|
||||
|
||||
struct ast *result =
|
||||
|
|
@ -332,12 +332,12 @@ struct ast *parse_else_clause(struct lexer_context *ctx)
|
|||
|
||||
if (token->type == TOKEN_ELSE)
|
||||
{
|
||||
result = parse_compound_list();
|
||||
result = parse_compound_list(ctx);
|
||||
token = POP_TOKEN(); // Forward
|
||||
}
|
||||
|
||||
if (result == NULL)
|
||||
result = ast_create_void();
|
||||
result = ast_create_void(ctx);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue