在我的 yacc 文件中,我有如下内容:
var_declaration : type_specifier ID ';'
| type_specifier ID '[' NUM ']' ';' ;
type_specifier : INT | VOID ;
ID、NUM、INT 和 VOID 是从 flex 返回的标记,因此 yacc 识别它们没有问题。问题是上面有'['和';'之类的东西。当这些都被flex识别出来了,应该给yacc返回什么?
在我的 yacc 文件中,我有如下内容:
var_declaration : type_specifier ID ';'
| type_specifier ID '[' NUM ']' ';' ;
type_specifier : INT | VOID ;
ID、NUM、INT 和 VOID 是从 flex 返回的标记,因此 yacc 识别它们没有问题。问题是上面有'['和';'之类的东西。当这些都被flex识别出来了,应该给yacc返回什么?
您可以只返回字符本身。保证令牌不会与 ASCII 字符冲突:
http://www.gnu.org/software/bison/manual/html_node/Token-Decl.html
Bison 将自动选择不会相互冲突或与 ASCII 字符冲突的代码。
所以在你的 flex 文件中,
[\[\];] { return yytext[0]; }
没关系。