flex和bison在产生C++类层面上接口不兼容描述如下:
1.flex中 C++类 yyFlexLexer产生接口
yyFlexLexer(istream *in,istream* out);
void yylex()
void switch_stream(istream *in,istream *out);
int yylex(istream *in,istream *out);
yyFlexLexer(istream *in,istream* out);
void yylex()
void switch_stream(istream *in,istream *out);
int yylex(istream *in,istream *out);
2. bison产生类所使用的lex接口,parser里面直接调用parser::lex_()接口,而lex_()直接调用全局的yylex()
int yylex (semantic_value_type& yylval, location_type& yylloc, type1 arg1, ...)
还是使用全局的yylex???
个人感觉如果使用C++类来完成两者的结合基本上很困难。但是依然有办法可以创建可重入的,就是使用yylex中的%reentrant这个选项,使用了yyscan_t保存状态,里面可以设置yylval和yylloc这两个对象。
本文探讨了Flex和Bison在C++环境下接口不兼容的问题,特别是涉及YYFlexLexer类与Bison产生的类之间的接口差异,并讨论了通过使用%reentrant选项创建可重入解析器的方法。
6572

被折叠的 条评论
为什么被折叠?



