如何在语法定义中定义替代文字?

问题描述 投票:0回答:1

我正在尝试定义一种语法来解析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中的文字定义替代项?我可以看到替代方案是可行的,但是我想知道是否有一种更简洁的定义方式,本着我的第一次尝试的精神

rascal
1个回答
0
投票

我似乎记得,implode的当前版本将替代项视为节点,即使替代项仅仅是文字,也不会对其进行拼合。但是,您的定义是完美的。

这是一个相对简单的功能请求,恕我直言,如果您有时间在GitHub上注册它。

另一个选择是根本不内爆,并使用具体语法

© www.soinside.com 2019 - 2024. All rights reserved.