如何内爆替代符号的嵌入式选择?
How to implode an embedded choice of alternative symbols?
我有这个语法定义
syntax RuleData
= rule_data: ID+ RulePart '-\>' (Command|RulePart)+ Message? Newlines
;
这在大多数情况下不会给我带来问题,唯一的问题是我不确定如何内爆 (Command|RulePart)+,我查看了 Rascal 文档但没有找到关于如何定义“联合”类型的任何内容。
这是我的 ADT 目前的样子
data RULEDATA
= rule_data(list[str] prefix, list[RULEPART] left, list[???] right, list[str] message, str)
;
那个???是它可以是 RulePart(为了简单起见,它是一个列表[str])或命令(它是一个 str)的位。
原来我把整个事情复杂化了。我没有尝试拥有类型的联合,而是简单地向 RULEPART 添加了一个可以容纳 COMMAND 的附加结构。我想我最初可能也对一些问题感到困惑,因为我在代码的其他部分有错误,我被误解为是由这个问题引起的。
data RULEDATA
= rule_data(list[str] prefix, list[RULEPART] left, list[RULEPART] right, list[str] message, str)
;
data RULEPART
= part(list[RULECONTENT] contents)
| command(str command)
;
我有这个语法定义
syntax RuleData
= rule_data: ID+ RulePart '-\>' (Command|RulePart)+ Message? Newlines
;
这在大多数情况下不会给我带来问题,唯一的问题是我不确定如何内爆 (Command|RulePart)+,我查看了 Rascal 文档但没有找到关于如何定义“联合”类型的任何内容。
这是我的 ADT 目前的样子
data RULEDATA
= rule_data(list[str] prefix, list[RULEPART] left, list[???] right, list[str] message, str)
;
那个???是它可以是 RulePart(为了简单起见,它是一个列表[str])或命令(它是一个 str)的位。
原来我把整个事情复杂化了。我没有尝试拥有类型的联合,而是简单地向 RULEPART 添加了一个可以容纳 COMMAND 的附加结构。我想我最初可能也对一些问题感到困惑,因为我在代码的其他部分有错误,我被误解为是由这个问题引起的。
data RULEDATA
= rule_data(list[str] prefix, list[RULEPART] left, list[RULEPART] right, list[str] message, str)
;
data RULEPART
= part(list[RULECONTENT] contents)
| command(str command)
;