feat(ast): 添加复合表达式和初始化器解析支持
重构AST表达式枚举,将COMPOUND_LITERAL重命名为COMPOUND, 更新相关结构体定义以支持复合字面量的左右表达式向量表示。 添加lvalue表达式类型用于左值处理,实现完整的初始化器解析功能, 包括大括号初始化列表、成员访问和数组下标的处理逻辑。 更新表达式解析器为基于优先级的递归下降解析,修复变量声明中 初始化表达式的内存泄漏问题。 完善类型限定符和存储类说明符的重复检查机制,增强语法分析的准确性。
This commit is contained in:
@@ -52,7 +52,7 @@ static const char *node_type_names[] = {
|
||||
[SCC_AST_EXPR_CAST] = "CastExpr",
|
||||
[SCC_AST_EXPR_SIZE_OF] = "SizeofExpr",
|
||||
[SCC_AST_EXPR_ALIGN_OF] = "AlignofExpr",
|
||||
[SCC_AST_EXPR_COMPOUND_LITERAL] = "CompoundLiteralExpr",
|
||||
[SCC_AST_EXPR_COMPOUND] = "CompoundExpr",
|
||||
[SCC_AST_EXPR_INT_LITERAL] = "IntLiteralExpr",
|
||||
[SCC_AST_EXPR_FLOAT_LITERAL] = "FloatLiteralExpr",
|
||||
[SCC_AST_EXPR_CHAR_LITERAL] = "CharLiteralExpr",
|
||||
@@ -461,15 +461,15 @@ static void dump_expr_impl(scc_ast_expr_t *expr, scc_tree_dump_ctx_t *ctx) {
|
||||
}
|
||||
break;
|
||||
|
||||
case SCC_AST_EXPR_COMPOUND_LITERAL:
|
||||
dump_child_node((scc_ast_node_t *)expr->compound_literal.type, ctx,
|
||||
false);
|
||||
// 初始化列表
|
||||
for (size_t i = 0; i < expr->compound_literal.init_list.size; i++) {
|
||||
dump_child_node(
|
||||
(scc_ast_node_t *)expr->compound_literal.init_list.data[i], ctx,
|
||||
i == expr->compound_literal.init_list.size - 1);
|
||||
}
|
||||
case SCC_AST_EXPR_COMPOUND:
|
||||
// dump_child_node((scc_ast_node_t *)expr->compound_literal.type, ctx,
|
||||
// false);
|
||||
// // 初始化列表
|
||||
// for (size_t i = 0; i < expr->compound_literal.init_list.size; i++) {
|
||||
// dump_child_node(
|
||||
// (scc_ast_node_t *)expr->compound_literal.init_list.data[i],
|
||||
// ctx, i == expr->compound_literal.init_list.size - 1);
|
||||
// }
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
Reference in New Issue
Block a user