我正在使用 GNU Bison 2.4.2 为我正在研究的一种新语言编写语法,我有一个问题。当我指定规则时,假设:
statement : T_CLASS T_IDENT '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}
例如,如果我对规则有变化
statement : T_CLASS T_IDENT T_EXTENDS T_IDENT_LIST '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}
哪里(来自弹性扫描仪规则):
"class" return T_CLASS;
"extends" return T_EXTENDS;
[a-zA-Z\_][a-zA-Z0-9\_]* return T_IDENT;
(并且 T_IDENT_LIST 是逗号分隔标识符的规则)。
有没有办法只在一个规则中指定所有这些,以某种方式将“T_EXTENDS T_IDENT_LIST”设置为可选?我已经尝试过
T_CLASS T_IDENT (T_EXTENDS T_IDENT_LIST)? '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}
但是 Bison 给了我一个错误。
谢谢