Parsing 如何为给定集的幂集编写产生式规则

Parsing 如何为给定集的幂集编写产生式规则,parsing,language-agnostic,grammar,Parsing,Language Agnostic,Grammar,我正在写一个小的命令语言。该语言有几个简单的命令,可以组合成复杂的命令。例如,如果我们有命令煎鸡蛋,做三明治,煮咖啡,我们可以创建一个新命令: 做早餐:=煎鸡蛋、做三明治、煮咖啡 然而,有时我早餐只需要咖啡,有时咖啡和三明治都需要,等等。也就是说,制作早餐可以是命令集的任何子集:{煎蛋,制作三明治,制作咖啡} 因此,我需要一个规则来定义给定一组简单命令的幂集。这有意义吗?我可以这样做吗?看起来您使用的是(E)BNF语法符号。如果您的问题是关于如何在语法规则中捕获powerset。AFAIK(E)

我正在写一个小的命令语言。该语言有几个简单的命令,可以组合成复杂的命令。例如,如果我们有命令
煎鸡蛋
做三明治
煮咖啡
,我们可以创建一个新命令:

做早餐:=煎鸡蛋、做三明治、煮咖啡

然而,有时我早餐只需要咖啡,有时咖啡和三明治都需要,等等。也就是说,
制作早餐
可以是命令集的任何子集:
{煎蛋,制作三明治,制作咖啡}

因此,我需要一个规则来定义给定一组简单命令的幂集。这有意义吗?我可以这样做吗?

看起来您使用的是(E)BNF语法符号。如果您的问题是关于如何在语法规则中捕获powerset。AFAIK(E)BNF只允许描述上下文无关的语法,但是powerset可以建模为字母表{a}中的语言{a^2^n},这是上下文敏感的。这意味着,您不能使用(E)BNF来描述任何功率集。但是,您可以做的是枚举特定的电源集。例如: S:=(a,{b,{c}}|(b,{c})| c |ε); 这种语言是{a,b,c}字母表的动力集。

看起来您使用的是(E)BNF语法符号。如果您的问题是关于如何在语法规则中捕获powerset。AFAIK(E)BNF只允许描述上下文无关的语法,但是powerset可以建模为字母表{a}中的语言{a^2^n},这是上下文敏感的。这意味着,您不能使用(E)BNF来描述任何功率集。但是,您可以做的是枚举特定的电源集。例如: S:=(a,{b,{c}}|(b,{c})| c |ε);
这种语言是{a,b,c}字母表的动力集。

对我来说是有意义的,你们也许可以做到这一点。但是如果没有看到要解析的现有语法和/或示例代码的某些部分,就很难说得更多。你所说的“规则”是什么意思?您使用的是哪种解析器?你的例子有一个缺点:我不能煎两个鸡蛋。是否需要将该限制烘焙到解析器中?从根本上说,我不知道如何为我已经熟悉了一半的解析器编写幂集规则,我也不知道为什么我会这样做。这对我来说是有意义的,你也许可以这样做。但是如果没有看到要解析的现有语法和/或示例代码的某些部分,就很难说得更多。你所说的“规则”是什么意思?您使用的是哪种解析器?你的例子有一个缺点:我不能煎两个鸡蛋。是否需要将该限制烘焙到解析器中?从根本上说,我不知道如何为我有点熟悉的解析器编写幂集规则,我也不知道为什么我会这样做。谢谢,Gabriel。我发现幂集可以用上下文无关语法来描述。不管怎样,它是如何建模的,这很有趣。谢谢,加布里埃尔。我发现幂集可以用上下文无关语法来描述。不管怎样,它是如何建模的,这很有趣。