我在編寫野牛分析器時遇到了麻煩,並且意外地遇到了解析器無法打印調試信息的困難。我在網上找到了兩種解決方案,但似乎都沒有效果。獲取野牛分析器以泄露調試信息
This主張把這個代碼在主例程:
extern int yydebug;
yydebug = 1;
不幸的是,C++編譯器檢測未定義的參考`YYDEBUG」。
This建議把
#if YYDEBUG == 1
extern yydebug;
yydebug = 1;
#endif
到語法文件。它編譯但不產生輸出。
什麼工作是編輯解析器文件本身,通過
int yydebug = 1;
最大的缺點更換
int yydebug;
是,我有這個,我改變了語法文件每一次重做,這在調試期間會不斷髮生。有沒有其他的方法可以挑動解析器進入祕密的詭計?
我使用野牛V2.4.1生成解析器,用下面的命令行選項:
bison -ldv -p osil -o $(srcdir)/OSParseosil.tab.cpp OSParseosil.y
雖然輸出是一個C++文件中,我使用標準的C骨架。
出於好奇,爲什麼你覺得有必要使用'-l'標誌來壓制'#行'指令? – rici
「猴子看,猴子做」。我從某個地方繼承了這條線,並堅持不懈地生活。 (我現在甚至沒有什麼好處。) – user3697176
因此,將l更改爲t,並將調試編譯爲:)前綴是問題的根源;看到編輯我的答案。 – rici