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; };这是在干嘛
时间: 2023-06-26 19:06:33 浏览: 43
这是一个编译器中的语法规则,用于创建抽象语法树(AST)。这个语法规则定义了一个Block,它可以是一个Statement或是一个Block加上一个Statement。在第一个选择中,创建了一个AST_OP_BLOCK类型的中间节点,其孩子为一个Statement;在第二个选择中,将一个Statement作为Block节点的孩子,并返回Block节点本身。这个语法规则的作用是将一个或多个语句组合成一个块,以便在程序的其他部分中进行处理。
相关问题
static struct ast_node *ir_visit_ast_node(struct ast_node *node) { // 非法节点 if (nullptr == node) { return nullptr; } bool result = true; switch (node->type) { case AST_OP_NULL: // 叶子节点 result = ir_leaf_node(node); break; case AST_OP_MUL: // 乘法节点 result = ir_mul(node); break; case AST_OP_ADD: // 加法节点 result = ir_add(node); break; case AST_OP_EXPR: // 表达式结点,不显示表达式的值 // 由于不显示值,并且不支持赋值操作,都是右值操作,这里什么都不做 result = ir_show(node, false); break; case AST_OP_EXPR_SHOW: // 表达式结点,显示表达式的值 result = ir_show(node, true); break; case AST_OP_ASSIGN: // 赋值语句 result = ir_assign(node); break; case AST_OP_BLOCK: // 多个语句组成的块 result = ir_block(node); break; // TODO 其它运算符支持追加,同时增加表达式运算函数调用 //add_no2:sub case AST_OP_SUB: //减法节点 result = ir_sub(node); break; default: // 错误,不支持 result = false; break; } // 语义解析错误,则出错返回 if (!result) { node = nullptr; } return node; }这是在干嘛
这段代码是对抽象语法树(AST)进行遍历,根据节点类型调用不同的代码生成函数生成中间代码。具体来说:
- 对于叶子节点,调用 ir_leaf_node() 生成对应的中间代码。
- 对于乘法节点,调用 ir_mul() 生成对应的中间代码。
- 对于加法节点,调用 ir_add() 生成对应的中间代码。
- 对于表达式节点,根据是否需要显示表达式的值,调用 ir_show() 生成对应的中间代码。
- 对于赋值语句节点,调用 ir_assign() 生成对应的中间代码。
- 对于多个语句组成的块节点,调用 ir_block() 生成对应的中间代码。
- 对于不支持的节点类型,返回错误。
最后返回处理后的节点。这段代码的作用是将 AST 转换为中间代码,用于后续的编译和执行。
1 2 ##! @TODO: get admin bound from openmap 3 ##! @AUTHOR: kanchangcheng@baidu.com 4 ##! @DATE: 20180309 14:31:29 5 ##! @VERSION: 1.0 6 #php=/home/map/php-fpm/bin/php 7 php=~/odp/php/bin/php 8 hadoop_afs=~/tools/hadoop-afs/hadoop-client/hadoop/bin/hadoop 9 hadoop=/home/map/tools/hadoop-afs/hadoop-client/hadoop/bin/hadoop 10 11 #hdfs_block_path=/app/lbs/lbs-di/bdi/warehouse/huiyan.db/map_huiyan_block_in fo_mid/ 12 hdfs_block_path="afs://kunpeng.afs.baidu.com:9902/user/lbs-huiyan/warehouse/ huiyan.db/map_huiyan_block_info_mid/" 13 #hdfs_admin_path=/app/lbs/lbs-di/bdi/warehouse/huiyan.db/map_huiyan_admin_in fo/ 14 hdfs_admin_path="afs://kunpeng.afs.baidu.com:9902/user/lbs-huiyan/warehouse/ huiyan.db/map_huiyan_admin_info/" 15 queryengine=/home/map/tools/queryengine-client-2.1.7-online/queryengine/bin/ queryengine 16 datax=/home/map/tools/datax_huiyan_v2/bin/datax.py 17 python=~/tools/py2714/phq 18 #exit 0 19 if [ "$1" ];then
这段代码是一个Shell脚本,包含了一些变量的定义和注释。
具体解释如下:
1. `##! @TODO: get admin bound from openmap`
- 这是一个注释,表示要从OpenMap获取管理员边界信息。
3. `##! @AUTHOR: kanchangcheng@baidu.com`
- 这是一个注释,表示作者是kanchangcheng@baidu.com。
5. `##! @DATE: 20180309 14:31:29`
- 这是一个注释,表示脚本的最后修改日期和时间。
7. `##! @VERSION: 1.0`
- 这是一个注释,表示脚本的版本号。
6-18. `php=~/odp/php/bin/php`, `hadoop_afs=~/tools/hadoop-afs/hadoop-client/hadoop/bin/hadoop`, `hadoop=/home/map/tools/hadoop-afs/hadoop-client/hadoop/bin/hadoop`, `hdfs_block_path="afs://kunpeng.afs.baidu.com:9902/user/lbs-huiyan/warehouse/huiyan.db/map_huiyan_block_info_mid/"`, `hdfs_admin_path="afs://kunpeng.afs.baidu.com:9902/user/lbs-huiyan/warehouse/huiyan.db/map_huiyan_admin_info/"`, `queryengine=/home/map/tools/queryengine-client-2.1.7-online/queryengine/bin/queryengine`, `datax=/home/map/tools/datax_huiyan_v2/bin/datax.py`, `python=~/tools/py2714/phq`
- 这些行定义了一些变量,并给它们赋予了特定的值。
19. `if [ "$1" ];then`
- 这一行是一个条件语句,判断脚本是否接收到了一个参数。
综上所述,这段代码的作用是定义了一些变量,并给它们赋予了特定的值。其中还包含了一些注释,用于说明脚本的功能、作者、版本和最后修改日期。最后还有一个条件语句,用于判断脚本是否接收到了一个参数。
相关推荐
![dmp](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)