我正在尝试定义一种语法来解析COBOL中的数据定义,并且对图片子句有一个特定的定义,如下所示:
syntax PictureClause = pic: "PIC" PictureStringType PictureStringLen ("VALUE"|"VALUES") ValueSpec
我与此语法匹配的ADT如下:
data PictureClause = pic(str pictype, PictureStringLen plen, str valuespec);
但是,我发现爆破函数似乎试图将括号括起来的语句与第二个str参数进行匹配,而不是像“ PIC”字符串文字那样忽略它。但是,此语法定义按预期工作:
syntax PictureClause = pic: "PIC" PictureStringType PictureStringLen "VALUE" ValueSpec
|pic: "PIC" PictureStringType PictureStringLen "VALUES" ValueSpec;
如标题所述,如何在单个语句中为语法定义中不需要的ADT中的文字定义替代项?我可以看到替代方案是可行的,但是我想知道是否有一种更简洁的定义方式,本着我的第一次尝试的精神
我似乎记得,implode
的当前版本将替代项视为节点,即使替代项仅仅是文字,也不会对其进行拼合。但是,您的定义是完美的。
这是一个相对简单的功能请求,恕我直言,如果您有时间在GitHub上注册它。
另一个选择是根本不内爆,并使用具体语法