2011-09-19 57 views
0

我正在看用flex和野牛做的解析器。野牛2.5。%位置導致即時sigsegv

我添加%位置到.Y文件,並重新編譯,並嘗試運行,我用SIGSEGV回報(當然,在MacOSX上等效):

Program received signal EXC_BAD_ACCESS, Could not access memory. 
Reason: KERN_PROTECTION_FAILURE at address: 0x000000010003f123 
0x000000010003f38c in yylex (yylval_param=0x7fff5fbff5e8, yyscanner=0x7fff5fbff5d0) at  lex.yy.c:2036 
2036   *yy_cp = yyg->yy_hold_char; 

這一切是生成的代碼,所以我不知道先去哪裏瞭解yy_cp如何最終指向只讀存儲。

注意,詞法分析器源包括

%option noinput 
%option reentrant bison-bridge 

和解析器源包括

%lex-param {yyscan_t *scanner } /* Call flex functions with this argument  */ 

回答

1

它看起來像你的詞法分析器和%lex-param使用額外的參數與函數yylex,可能通過%option bison-bridge和/或%define api.pure在野牛文件中。因此,如果將%locations添加到野牛文件中,則需要對flex文件進行相應的更改。它可能就像添加%option bison-locations一樣簡單,或者可能需要更改各種宏,具體取決於您在做什麼。

+0

已編輯的問題表明您是正確的。接下來我會嘗試野牛地點選項。 – bmargulies