- 论坛徽章:
- 0
|
while (!feof(f)){
if (!fscanf(f,"%c",&CurrToken)) goto die;
switch (CurrToken){
case ':':
fscanf(f,"%s",(tree[pn].name));
fscanf(f,"%s",(tree[pn].tempfile0));
fscanf(f,"%s",(tree[pn].tempfile1));
if (lastToken == '(')
tree[*stacktop].child0 = tree + pn;
if (lastToken == ',')
tree[*stacktop].child1 = tree + pn;
break;
case '(':
*(++stacktop) = pn;
pn++;
break;
case ')':
stacktop --;
break;
case ',':
pn++;
break;
case ' ':
break;
default:
break;
}
if (CurrToken == ',' || CurrToken == '(' || CurrToken == ')')
lastToken = CurrToken;
} | 这个循环吗?
其实这是个非常拙劣的自动机,我也想改成递归方式实现,因为递归方式优雅,易懂。而且二叉树只在程序启动时要创建,因此解析文本的代码慢点无所谓。只是现在想不出来怎么递归实现。 |
|