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
以免出错。我可以想到递归替代方案,但我想尽可能保持干净!
谢谢