vals array_vals vals: STRING

问题描述 投票:0回答:1

FLOAT

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

我觉得这很容易解释,但有一个问题:无论我在哪里打印了 array_vals,使用这个。array: '[' array_vals ']' { cout << $2 << endl; } 在我的源代码中,我只得到数组的第一个值,所以如果我在我的源文件中写了这个,那么它只打印出第一个值。[10, 20, 30, 40] 那么它只打印 10. 我试过打印 valsarray_vals而且它更奇怪,不一致。我知道这不是一个bug,因为我从Bison的3.5.1版本到3.6.2版本,没有任何区别。先谢谢你

c++ console bison flex-lexer
1个回答
1
投票

一个通用的 flex+bison 建议:让他们打印 一切 所以词典会有这样的行数。

">=" { 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; } ;
© www.soinside.com 2019 - 2024. All rights reserved.