-1
我在YACC和C/C++中編寫程序。它解析一個相當簡單的語法並將結果存儲在一些表中。YACC:我可以從我的「語義」處理中生成「語法錯誤」嗎?
我有一個像
room: DOTR ID roomname { AddRoom($3, $2); };
和AddRoom代碼規則:
void AddRoom(const char* name, const char* id)
{
theRoom = (void)new GameRoom(name, id);
if (!theGame->addRoom(theRoom)) {
?????
}
}
????我會插入代碼來生成語法錯誤(我希望)。
此代碼的目的是遊戲中的每個對象(房間,門,NPC,東西)都有唯一的ID。如果theGame->addRoom
檢測到ID不唯一,它將返回false,並且我希望yacc在輸入的那一點顯示一條錯誤消息 - 就像非法令牌已經存在一樣。
謝謝。這回答了我的問題。 呃......如果我所有的yyerror都不會讓它開始丟棄令牌? 因爲你是對的,我想記住我有一個錯誤(1),但我不想放棄令牌。 只是出於好奇,如果我_wanted_開始丟棄令牌,我該怎麼辦? (1)我將代碼添加到yyerror以設置全局標誌。如果該標誌被設置,我將不會生成輸出。 –
D'oh!當然調用yyerror不會對語法識別器做任何事情:body只是一個printf來產生錯誤信息... –