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
. 我试过打印 vals
在 array_vals
而且它更奇怪,不一致。我知道这不是一个bug,因为我从Bison的3.5.1版本到3.6.2版本,没有任何区别。先谢谢你
一个通用的 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; } ;