我想在一个名为'mismatches'的变量中保留一个错误计数,其中我声明了野牛文件的第一部分。如何在野牛语法中使用声明的C++变量
在我的野牛语法中,我为该变量设置了一个值。
然后在野牛文件的第三部分,在main()函数我清点它的价值,它的0
我野牛文件的一个非常修改/砍下版本:
%{
extern "C" FILE *yyin;
extern int yylineno;
extern int yynerrs;
int yylex();
// Declare 'mismatches'
int mismatches;
%}
%error-verbose
%%
expression:
expression ADDOP term
{
cout << "Parser is now here. Going to set `mismatches` to 6";
mismatches = 6;
}
| term
;
%%
int main()
{
// Outputs 0
cout << mismatches;
yyparse();
return 1;
}
我应该怎么做,以便变异的'不匹配'可以用在野牛文件的所有部分?
它已经是。查看生成的文件,将'%{'和'%}'之间的完整块原样复制到生成的文件中,并且它应该早于生成的文件(否则,包含头文件可能会出现问题)。 –
的确我在那里看到它。从我所看到的,它应该按照预期工作。但是它的值是0.即使我没有给它赋值,只是'int不匹配',并且尝试cout <<不匹配;在main()函数中,它表示0(当它应该给我一个未初始化的警告) – sqram
不适用于全局变量,因为它们被隐式初始化。见例如[这里](http://www.cplusplus.com/forum/general/7280/)来自Bjarne Stroutrup(C++的创造者)的引用。 –