C-Minus´Ê·¨·ÖÎöºÍÓï·¨·ÖÎöÉè¼Æ±àÒëÆ÷±àÒëÔ­Àí¿Î³ÌÉè¼Æ

}

else if(currentToken.tokenType==VOID) { } else { }

if((p!=NULL)&&(currentToken.tokenType==ID)) {

q = newNode(IdK);

q->attr.name = currentToken.tokenString.c_str(); match(ID);

if(currentToken.tokenType==LPAREN)//'('£ºº¯ÊýÇé¿ö { }

else if(currentToken.tokenType==LMBRACKET)//'['£ºÊý×éÉùÃ÷ {

t = newNode(Var_DeclK);

TreeNode * m = newNode(Arry_DeclK);

match(LMBRACKET); match(NUM); t = newNode(FunK); t->child[0] = p; t->child[1] = q; match(LPAREN); t->child[2] = params(); match(RPAREN);

t->child[3] = compound_stmt(); syntaxError(\ÀàÐÍÆ¥Åä´íÎó\p = newNode(VoidK); match(VOID);

} else { } }

}

s = newNode(ConstK);

s->attr.val = atoi(lastToken.tokenString.c_str()); m->child[0] = q; m->child[1] = s; t->child[0] = p; t->child[1] = m; match(RMBRACKET); match(SEMI);

else if(currentToken.tokenType==SEMI)//';'½áβ£ºÆÕͨ±äÁ¿ÉùÃ÷ { } else { }

syntaxError(\t = newNode(Var_DeclK); t->child[0] = p; t->child[1] = q; match(SEMI);

syntaxError(\

return t;

TreeNode * Parser :: params(void) {

TreeNode * t = newNode(ParamsK); TreeNode * p = NULL;

if(currentToken.tokenType==VOID)//¿ªÍ·Îªvoid£¬²ÎÊýÁбí¿ÉÄÜÊÇ(void)ºÍ(void id,[¡­¡­])Á½ÖÖÇé¿ö

{ }

else if(currentToken.tokenType==INT)//²ÎÊýÁбíΪ(int id,[¡­¡­]) { } else { } }

TreeNode * Parser :: param_list(TreeNode * k)//k¿ÉÄÜÊÇÒѾ­±»È¡³öÀ´µÄVoidK£¬µ«ÓÖ²»ÊÇ(void)ÀàÐ͵IJÎÊýÁÐ±í£¬ËùÒÔÒ»Ö±´«µ½paramÖÐÈ¥£¬×÷ΪÆäÒ»¸ö×Ó½Úµã {

TreeNode * t = param(k); TreeNode * p = t;

k = NULL;//ûÓÐÒª´«¸øparamµÄVoidK£¬ËùÒÔ½«kÉèΪNULL while(currentToken.tokenType==COMMA) {

TreeNode * q = NULL; match(COMMA); syntaxError(\

t->child[0] = param_list(p); p = newNode(VoidK); match(VOID);

if(currentToken.tokenType==RPAREN)//²ÎÊýÁбíΪ(void) { }

else//²ÎÊýÁбíΪ(void id,[¡­¡­]) ->voidÀàÐ͵ıäÁ¿ { }

t->child[0] = param_list(p); if(t!=NULL)

t->child[0] = p;

return t;

}

q = param(k); if(q!=NULL) { }

if(t==NULL) { } else { }

p->sibling = q; p = q; t = p = q;

return t; }

TreeNode * Parser :: param(TreeNode * k) {

TreeNode * t = newNode(ParamK);

TreeNode * p = NULL;//ParamKµÄµÚÒ»¸ö×Ó½Úµã TreeNode * q = NULL;//ParamKµÄµÚ¶þ¸ö×Ó½Úµã

if(k==NULL&¤tToken.tokenType==INT) { }

else if(k!=NULL) { }

if(p!=NULL) {

p = k;

p = newNode(IntK); match(INT);

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)