Productions
program = cls*;
cls = clsdef name openbrace clsdata closingbrace;
clsdata = (clsfield|clsmethod)*;
clsfield = [variabletype]:name [variablename]:name semi;
clsmethod = [returntype]:name [methodname]:name openmethodbrace closingmethodbrace openbrace closingbrace;
問題はにあります
clsdata = (clsfield|clsmethod)*;
に設定clsdata
した場合
clsdata = clsfield*;
またはに
clsdata = clsmethod*;
うまく機能しますが、ご想像のとおり、私が意図したものと同じ意味ではありません。クラスでメソッドとフィールドの両方を許可する必要があります(順不同です!)。
clsdata
ですから、私の質問は、エラーが発生しないようにどのように定義すればよいかということです。再帰的な代替案を考えることもできますが、これを可能な限りクリーンに保ちたいと思います。
ありがとう