Я использую 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 ...
}
Но Бизон дал мне ошибку.
Спасибо