【问题标题】:Do ISO grammars follow a specific formatISO语法是否遵循特定格式
【发布时间】:2012-08-23 14:08:26
【问题描述】:

以下是 C# 语言规范的语法部分的摘录:

  1. 这是以特定格式编写的吗?我查看了我发现的旧 C++ ISO 中的语法部分,它似乎遵循相同的格式,那么这里是否使用了一些标准来编写这个语法?我问是因为我希望能够创建一个工具,我可以在其中直接粘贴语法并立即拥有一个工作的 C# 解析器。

  2. 微软似乎免费发布了他们的 C# 规范,但我在任何地方都找不到 C++11 格式。我要买这个才能看吗?

【问题讨论】:

    标签: c# c++ grammar iso


    【解决方案1】:

    它是 Yacc 使用的 BNF 的变体。 Yacc 通常将; 作为其语法的一部分,但是使用像 C# 和 C++ 这样的语言进行更改会使事情变得更简单,其中; 本身就非常重要。与大多数 BNF 变体不同,它有一个 :,而 BNF 经常使用 =(另请参阅 Van Wijngaarden 语法,您很快就会知道这个答案的来源,而不仅仅是一点点知识)。

    ISO 没有关于必须在其标准中使用哪种语法的规则,因此其他人使用 BNF、ABNF、EBNF、Wirth 语法,也许还有其他语法。

    ISO 标准通常起源于国家标准或其他标准,然后被 ISO 采用。由于不同的标准机构使用不同的语法(IETF 在 RFC 中使用 ABNF [自己在 RFC 5234 中定义],BSI 和 W3C 使用不同的 EBNF 变体,等等)ISO 中的语法通常反映了它的起源。

    这里就是这种情况。 Kernigan 和 Ritchie 在他们的书The C Programming Language 中使用了这种格式。虽然 ANSI 标准和后来的 ISO 标准在语法本身上有所不同,但它们使用相同的格式,并且从那时起它就被用于其他类似 C 的语言。

    【讨论】:

      【解决方案2】:

      每个标准都有自己的特色。但是在编译器编写者中,有一种相当标准的语法描述方式,这就是您在此处和 C++ 标准中看到的内容。

      【讨论】:

      • 扩展 BNF 有一个 ISO 标准 (ISO/IEC 14977)。从您的回答中,我知道您不必遵循它。
      • @AProgrammer - 对。我不知道 14977,但不需要遵循它的语言标准。标准有一系列要求,但它们旨在更普遍适用。
      【解决方案3】:

      这是您在此处看到的 backus naur form 语法的变体。虽然不完全是标准格式,但它非常相似。这通常是显示应该如何解析语言的标准方式,也是解析器生成器的常见输入。

      【讨论】:

        【解决方案4】:

        C++ 标准不是免费提供的。您可以在 webstore.ansi.org 上以 30 美元的价格购买一份副本。搜索文档编号 14882,然后查找 C++ 标准。

        【讨论】:

          【解决方案5】:

          描述语法的常用方法是使用Backus-Naur Form (BNF)Extended Backus-Naur Form (EBNF)。如果您希望在 C# 中轻松解析语言,请查看 Irony,它是 C# 的语言工具包,它允许您使用与 EBNF 非常相似的东西来描述语法。

          除了这些语法之外,还有Parsing Expression Grammar (PEG),但我认为它不像 BNF 或 EBNF 那样普遍。

          【讨论】:

            猜你喜欢
            • 2020-09-27
            • 2021-01-02
            • 1970-01-01
            • 1970-01-01
            • 2016-06-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-09-17
            相关资源
            最近更新 更多