-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 _won't_それはトークンを破棄し始めますか? あなたは正しいので、私はエラー(1)があることを覚えておきたいが、私はトークンを破棄したくない。 私はトークンを破棄したいと思ったら、私は何をしますか? (1)yyerrorにグローバルフラグを設定するコードを追加しました。そのフラグがセットされていれば、私は出力を生成しません。 –
D'oh!もちろん、yyerrorを呼び出すことはシンタックスレコグナイザには何もしません。本文はエラーメッセージを生成する単なるprintfです... –