以下是 C# 语言规范的语法部分的摘录:
这是以特定格式编写的吗?我查看了我发现的旧 C++ ISO 中的语法部分,它似乎遵循相同的格式,那么这里是否使用了一些标准来编写这个语法?我问是因为我希望能够创建一个工具,我可以在其中直接粘贴语法并立即拥有一个工作的 C# 解析器。
微软似乎免费发布了他们的 C# 规范,但我在任何地方都找不到 C++11 格式。我要买这个才能看吗?
它是 Yacc 使用的 BNF 的变体。Yacc 通常将;
其作为其语法的一部分,但使用 C# 和 C++ 之类的语言进行更改会使事情变得更简单,其中 C# 和 C++;
本身就非常重要。与大多数 BNF 变体不同,它有一个:
BNF 经常使用的地方=
(另请参阅 Van Wijngaarden 语法,您很快就会知道比这个答案来自的一点点知识要多得多)。
ISO 没有关于必须在其标准中使用哪种语法的规则,因此其他人使用 BNF、ABNF、EBNF、Wirth 语法,也许还有其他语法。
ISO 标准通常起源于国家标准或其他标准,然后由 ISO 采用。由于不同的标准机构使用不同的语法(IETF 在 RFC 中使用 ABNF [它在 RFC 5234 中定义],BSI 和 W3C 使用 EBNF 的不同变体,等等)ISO 中的语法通常反映了它的起源。
这里就是这种情况。Kernigan 和 Ritchie 在他们的《C 编程语言》一书中使用了这种格式。虽然 ANSI 标准和后来的 ISO 标准在语法本身上有所不同,但它们使用相同的格式,并且从那时起它就被用于其他类似 C 的语言。
每个标准都做自己的事情。但是在编译器编写者中,有一种描述语法的相当标准的方式,这就是您在此处和 C++ 标准中看到的内容。
这是您在此处看到的backus naur 语法形式的变体。虽然不完全是标准格式,但它非常相似。这通常是显示应该如何解析语言的标准方式,也是解析器生成器的常见输入。
C++ 标准不是免费提供的。您可以在 webstore.ansi.org 上以 30 美元的价格购买一份副本。搜索文档编号 14882,然后查找 C++ 标准。
描述语法的常用方法是使用Backus-Naur Form (BNF)或Extended Backus-Naur Form (EBNF)。如果您希望在 C# 中轻松解析语言,请查看Irony,它是 C# 的语言工具包,它允许您使用与 EBNF 非常相似的东西来描述语法。
除了这些语法之外,还有Parsing Expression Grammar (PEG),但我认为它不像 BNF 或 EBNF 那样普遍。