深入探索计算器语法解析与高级功能实现
1. 代码基础与树遍历
在代码实现中,有一段关键的代码用于处理特定类型的节点:
/* no subtree */
case 'K':
free(a);
break;
default: printf("internal error: free bad node %c\n", a->nodetype);
}
这里当节点类型为 'K' 时,释放该节点的内存。若节点类型不符合预期,则输出错误信息。
接下来是两个树遍历的例程,它们都采用深度优先遍历的方式,递归访问每个节点的子树,然后再访问节点本身。 eval 例程在每次调用时返回树或子树的值,而 treefree 则无需返回任何内容。
还有 yyerror 和 main 函数:
void
yyerror(char *s, ...)
{
va_list ap;
va_start(ap, s);
fprintf(stderr, "%d: error: ", yylineno);
vfprintf(stderr, s, ap);
fprintf(stderr, "\n");
}
int
main()
{
printf("> ");
return yyparse();
}
超级会员免费看
订阅专栏 解锁全文
59

被折叠的 条评论
为什么被折叠?



