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」をオプションとして設定して、これらすべてを1つのルールでのみ指定する方法はありますか? 私はすでに試しました
T_CLASS T_IDENT (T_EXTENDS T_IDENT_LIST)? '{' T_CLASS_MEMBERS '}' {
// create a node for the statement ...
}
しかし、バイソンは私にエラーを出しました。
ありがとう