-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来产生错误信息... –