我在下面的步骤,使我的野牛/柔性解析器折返用大惊小怪的最低金额麻烦。
这个问题似乎是在词法分析器。 由于一切解析器重入的,我不能再直接分配的yylval。 相反,根据Flex的手册 ,我不得不调用此函数:
void yyset_lval ( YYSTYPE * yylvalp , yyscan_t scanner );
但问题是,YYSTYPE是整型。 这是不是一个动态分配的值,它不是一个左值可言,所以我不能一个指针传递给它! 我失去了一些东西,如果没有,我怎么设置yylvalue? 我从来没有过这样的问题,与非重入解析器!
更新:好吧,我想我可能过得了整体式的问题。 现在解析器出现崩溃,因为没有输入设置,而我没有找到如何告诉词法分析器从哪里读取输入的任何文件。
Flex的文件:
%{
#define YYSTYPE Token // Token is a typedef to an integral type
// following two lines added per suggestion from Chris Dodd
#define YYPARSE_PARAM yyscan_t scanner
#define YYLEX_PARAM scanner
%}
%option reentrant
%option bison-bridge
// ...
{D}+{IS}? {
*yylval = Tokenint(strtol(yytext,0,10));
return(CONSTANT);
}
野牛文件:
%{
#define YYSTYPE Token
%define pure-parser
%lex-param {void * scanner}
%parse-param {void * scanner}
%token CONSTANT
// ...
获得这条线在解析器崩溃:
*yy_cp = yyg->yy_hold_char;
我怀疑我可能不会被用于解析正确初始化的一切。 该手册是非常混乱对这个问题,经常引用类型变量或没有解释他们来自哪里或者他们为什么要使用。 我调用解析这种方式:
void * scanner;
yylex_init(&scanner);
yyparse(scanner); // Note: was &scanner, this is wrong and will crash!
从通过烃源代码读取,yylex_init被分配struct yyguts_t
和归零出来。 当我到达出事,yy_cp是一个空指针,其实整个struct yyguts_t
仍然是零,编出来的! 所以我怀疑我不是正确初始化的东西 ,那就是导致它不知道从哪里获取输入。
最后编辑:我要去的封闭,我原来的问题得到回答,以纪念这个问题,并重新打开新的问题,因为一个新的问题。