TreeNode * stmt_sequence(void)
{
TreeNode * t = statement();
TreeNode * p = t;
while ((token!=ENDFILE) && (token!=END) &&
(token!=ELSE) && (token!=UNTIL))
/*
* if-stmt -> if exp then stmt-sequence [ else stmt-sequence ] end
* 可见stmt-sequence后面可能跟else , end ,然而这并不是 stmt_sequence 函数 * 该管的事,须由if_stmt函数来检测
* 所以 有 (token!=END) && (token!=ELSE),其它 ( (token!=UNTIL) ) 同理
*/
{
TreeNode * q;
match(SEMI);
q = statement();
if (q!=NULL) {
if (t==NULL) t = p = q;
else /* now p cannot be NULL either */
{
p->sibling = q;
p = q;
}
}
}
return t;
}
|