0
我有一個語法,所述符號中的一個可以取不同的值YACC(野牛)解析樹無序打印
StatementList : Statement RepeatStatementList { $$=insert_statement_list($1, $2); }
;
RepeatStatementList : RepeatStatementList SEMICOLON Statement { $$=insert_repeat_statement_list($1, $3); }
| { $$ = NULL; }
;
Statement : NUMBER { $$=insert_statement(NULL, $1); }
;
Statement : ID { $$=insert_statement($1, NULL); }
;
予定義的結構和如下面的插入物的例子:
struct statement_list_
{
st* s;
struct rstlist *r;
} stlist;
struct repeat_statement_list_
{
st* s;
struct repeat_statement_list_ *next;
} rstlist;
struct statement_
{
char *id;
int number;
} st;
stlist* insert_statement_list(rstlist *r, st* s)
{
stlist* l = (stlist*)malloc(sizeof(stlist));
l->s = s;
l->r = r;
return l;
}
rstlist* insert_repeat_statement_list(rstlist *next, st *s)
{
rstlist* l = (rstlist*)malloc(sizeof(rstlist));
l->s = s;
l->next = next;
return l;
}
st* insert_statement(char* id, int n)
{
st* l = (st*)malloc(sizeof(st));
l->id = id;
l->number = n;
return l;
}
我的問題是,如果我傳遞一個輸入,如:
id1
1
2
3
id2
我所得到的參觀項目而言是:
id1
1
id2
3
2
我的結構有什麼問題?
請記住,這是一個如此丟失或錯位的分號或括號可以忽略的示例。 :-)
謝謝
是的就是這樣。另外我刪除了RepeatStatementList並向StatementList添加了第二個選項。簡 – Nitrate 2012-04-19 14:24:37