static bool ir_leaf_node(struct ast_node *node) { Value *val = nullptr; if (node->attr.kind == DIGIT_KIND_ID) { // 新建一个ID型Value // TODO 类型没有指定,有问题,需要修改 // 变量,则需要在符号表中查找对应的值 // 若变量之前没有有定值,则采用默认的值为0 val = findValue(node->attr.id); if (!val) { printf("Line(%d) Variable(%s) not defined\n", node->attr.lineno, node->attr.id); return false; } } else if (node->attr.kind == DIGIT_KIND_INT) { // 新建一个整数常量Value val = newConstValue(node->attr.integer_val); } else { // 新建一个实数型常量Value val = newConstValue(node->attr.real_val); } node->val = val; return true; }同时可以处理整数型和实数型这一部分代码需要修改吗
时间: 2023-06-27 18:06:55 浏览: 149
node-red实践篇幅.docx
代码中已经能够处理整数型和实数型了,但是有一个问题需要解决。在处理实数型时,应该使用浮点数类型的常量来创建新的常量Value,而不是使用整数类型的常量。因此,可以修改代码如下:
```
if (node->attr.kind == DIGIT_KIND_INT) {
// 新建一个整数常量Value
val = newConstValue(node->attr.integer_val);
} else if (node->attr.kind == DIGIT_KIND_REAL) {
// 新建一个实数常量Value
val = newConstValue(node->attr.real_val);
} else {
// 新建一个ID型Value
// TODO 类型没有指定,有问题,需要修改
// 变量,则需要在符号表中查找对应的值
// 若变量之前没有有定值,则采用默认的值为0
val = findValue(node->attr.id);
if (!val) {
printf("Line(%d) Variable(%s) not defined\n",
node->attr.lineno,
node->attr.id);
return false;
}
}
```
这样就可以正确地处理实数型了。
阅读全文