我是词法分析和解析器生成的新手,我尝试直接从wikipedia编译野牛示例开始。这是一个可重入解析器的示例。
我尝试使用 2 个版本的野牛进行编译:2.5 和 2.6.5。前者编译和执行完美,但后者包括yyscan_t
在词法分析器头(Lexer.h)中声明的解析器头中的类型(我猜这是可重入功能所必需的)。因此它不会编译Parser.c
生成Parser.y
这是 2.6.5 中生成的额外部分,Parser.h
而 2.5 中不存在:
#ifdef YYPARSE_PARAM
#if defined __STDC__ || defined __cplusplus
int yyparse (void *YYPARSE_PARAM);
#else
int yyparse ();
#endif
#else /* ! YYPARSE_PARAM */
#if defined __STDC__ || defined __cplusplus
int yyparse (SExpression **expression, yyscan_t scanner); // this line
#else
int yyparse ();
#endif
#endif /* ! YYPARSE_PARAM */
我已经标记了导致问题的行。有什么想法吗?
编辑:我需要做的是确保yyscan_t
在野牛生成的头文件中声明。