【问题标题】:How to write a production rule for the power set of a given set如何为给定集合的幂集编写生产规则
【发布时间】:2011-01-21 21:22:40
【问题描述】:

我正在编写一种小型命令语言。该语言有一些简单的命令,可以组合成复杂的命令。例如,如果我们有命令fry an eggmake a sandwichmake coffee,我们可以创建一个新命令:

make a breakfast := fry an egg, make a sandwich, make coffee

但有时,我只想要早餐咖啡,有时咖啡和三明治等。也就是说,make a breakfast 可以是命令集的任何子集:{fry an egg, make a sandwich, make coffee}

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

【问题讨论】:

  • 这对我来说很有意义,你可能可以这样做。但是如果没有看到要解析的现有语法和/或示例代码的某些部分,就很难说更多。
  • “规则”是什么意思?您使用的是哪种解析器?你的例子有一个缺陷:我不能煎两个鸡蛋。是否需要将这种限制纳入解析器?从根本上说,我不知道如何为我一半熟悉的解析器编写幂集规则,也不知道为什么要这样做。

标签: parsing language-agnostic grammar


【解决方案1】:

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

【讨论】:

  • 谢谢,加布里埃尔。我看到幂集可以用上下文无关语法来描述。无论如何它可以被建模,这很有趣。
猜你喜欢
  • 1970-01-01
  • 2021-03-01
  • 2014-01-22
  • 2013-09-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
相关资源
最近更新 更多