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