$1->sons.push_back($2); $$ = $1;这是在干嘛
时间: 2024-01-01 19:04:18 浏览: 27
这是一个 C++ 中的语句,用于将 $2$ 加入到 $1$ 的 sons 数组的末尾,并将修改后的 $1$ 作为结果返回。其中,$1$ 和 $2$ 是指针类型。具体来说,这段代码将 $2$ 加入到 $1$ 的 sons 数组中,并将修改后的 $1$ 返回给 `$$`,`$$` 可以理解为这段代码的返回值。
相关问题
Block : Statement { // 创建一个AST_OP_BLOCK类型的中间节点,孩子为Statement($1) $$ = new_ast_node(AST_OP_BLOCK, $1); } | Block Statement { // Statement($2)作为Block($1)的孩子 $2->parent = $1; $1->sons.push_back($2); $$ = $1; };这是在干嘛
这是一个编译器中的语法规则,用于创建抽象语法树(AST)。这个语法规则定义了一个Block,它可以是一个Statement或是一个Block加上一个Statement。在第一个选择中,创建了一个AST_OP_BLOCK类型的中间节点,其孩子为一个Statement;在第二个选择中,将一个Statement作为Block节点的孩子,并返回Block节点本身。这个语法规则的作用是将一个或多个语句组合成一个块,以便在程序的其他部分中进行处理。
PROGRAM : PROGRAM SEGMENT { add_ast_son($1, $2); $$ = $1; } | SEGMENT { vector<ast_node*> sons; sons.push_back($1); $$ = new_ast_node(PROGRAM, sons); $$->node_value.program = new Program(line_no); ast_root = $$; } ;
这段代码看起来是一个语法分析器的一部分,它定义了两个语法规则:一个是 PROGRAM 规则,一个是 SEGMENT 规则。当语法分析器遇到这两个规则时,它会执行相应的动作。对于 PROGRAM 规则,它会将第二个参数作为子节点添加到第一个参数中,并将第一个参数设置为返回值;对于 SEGMENT 规则,它会创建一个新的 AST 节点,并将第一个参数作为子节点添加到该节点中,然后将该节点设置为返回值。同时,它还会将该节点标记为程序的根节点。
阅读全文