如果你只是想行號信息,然後指定你的(F)法文件%option yylineno
並在YACC /野牛文件中聲明extern int yylineno
。 flex將自動填入yylineno
。如果需要完整的行號/列信息,如yylloc
結構,並且您希望它與每個令牌關聯,您可以使用@n
在野牛中獲取它,那麼您將需要做很多工作,因爲flex不填寫(或者甚至計算)列號。
所以--bison-bridge
不會做你認爲它,它可能是你想要的東西沒有做。也許谷歌讓你想到頁面 Taco Joe的Enchiladas和Flex的誤解而不是appropriate section of the Flex manual,或者它可能只是讓你想到appendix on bison-bridge,你需要仔細閱讀,因爲雖然它的確是--bison-locations
更改yylex
的調用約定的情況下,重要的區別並沒有被強調得儘可能多。
也許柔性資料員提出,人們會明白,如果他們使用不調整其柔性動作此選項,這將必然產生的編譯器錯誤的假設。
無論如何,重要的一點是:
Note that the macros 'yylval' and 'yylloc' evaluate to pointers.
換句話說,當你指定--bison-bridge
,yylval
不再是一個全局變量(或--bison-locations
這意味着--bison-bridge
)。相反,yylex
與指針被調用到語義值對象,因此yylval
的類型爲YYSTYPE*
而不是YYSTYPE
。這意味着,你需要改變任何使用yylval
從柔性動作,例如,
yylval.str = strdup(yytext);
到
yylval->str = strdup(yytext);
(順便說一下,如果你的動作說yylval.str = yytext;
,你需要搜索對於諸如「爲什麼我的代幣的字符串值在分析器中發生變化」這樣的問題,或者您可以像上面那樣使用strdup
這樣的問題,我會有很多回答之一,但我有一個老式的想法,應該瞭解人們使用的工具,而不僅僅是一味地從匿名陌生人複製代碼。)
我們不打算下載任意'.zip'文件。找到一種用最少量代碼重現問題的方法。 –