C++ 无法在Bison代码中打印正确的值

C++ 无法在Bison代码中打印正确的值,c++,bison,flex-lexer,C++,Bison,Flex Lexer,因此,我尝试使用Bison 3.6.2声明数组的语法,如下所示: array: '[' array_vals ']' array_vals: | vals array_vals vals: STRING //String values defined in my lexer | FLOAT //Float values defined in my lexer | INT //Integer values defined in my lexer 我觉得这是不言自明的,但只有一个问题:无论我在

因此,我尝试使用Bison 3.6.2声明数组的语法,如下所示:

array: '[' array_vals ']'

array_vals:
| vals array_vals

vals: STRING //String values defined in my lexer
| FLOAT //Float values defined in my lexer
| INT //Integer values defined in my lexer
我觉得这是不言自明的,但只有一个问题:无论我在哪里打印数组,都要使用以下命令:数组:'['数组']]'{cout一个一般的flex+bison建议:让他们打印他们所做的一切。 所以lexer会有这样的线条:

">=" { cout << ">= on line: " << line << "\n"; return parser::make_GEQ(loc); }
vals:
val      { cout << "vals -> val\n";      $$ = {$1};                  } |
val vals { cout << "vals -> val vals\n"; $2.push_front($1); $$ = $2; } ;
解析器将有如下行:

">=" { cout << ">= on line: " << line << "\n"; return parser::make_GEQ(loc); }
vals:
val      { cout << "vals -> val\n";      $$ = {$1};                  } |
val vals { cout << "vals -> val vals\n"; $2.push_front($1); $$ = $2; } ;

你对数组的定义只允许一个值,也不允许逗号,所以我甚至不知道你是如何将输入解析的。还有,put;在最后一条规则之后:A:decs | stmts | whatever;@orenishhalom:为什么?@john我编辑了它……现在可以有多个值。我写下了它,而不是复制和粘贴,所以我不小心错过了它。抱歉!这在早期版本中是需要的,如果您每次都切换到jflex+CUP,其他解析器生成器也需要这样做。好的,您能给我解释一下吗?这$$是什么意思,在这种情况下对我有什么帮助?使用解析器有两种情况:第一种是获取输入文件,并决定其内容是否遵循指定了e语法。另一个将在解析器之后为以后的阶段生成AST。使用$$自动生成这样的AST。您是否有不一致的地方?是否要使用它交谈?