以下是C#语言规范语法部分的摘录:
这是用特定格式写的吗?我查看了我发现的旧C ++ ISO中的语法部分,它似乎遵循相同的格式,所以这里是否有一些标准用于编写这种语法?我问,因为我希望能够创建一个工具,我可以直接粘贴语法并立即使用一个有效的C#解析器。
Microsoft似乎免费发布了他们的C#规范,但我无法在任何地方找到C ++ 11格式。我是否必须购买才能查看?
答案 0 :(得分:2)
这是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语言。
答案 1 :(得分:1)
每个标准都有自己的功能。但是在编译器编写者中,有一种相当标准的描述语法的方法,这就是你在这里以及在C ++标准中所看到的。
答案 2 :(得分:1)
这是您在此处看到的backus naur form语法的变体。虽然不完全是标准格式,但它非常相似。这通常是显示语言应该如何解析的标准方式,以及解析器生成器的常见输入。
答案 3 :(得分:1)
C ++标准不是免费提供的。您可以在webstore.ansi.org购买30美元的副本。搜索文档号14882,然后查找C ++标准。
答案 4 :(得分:0)
描述语法的常用方法是使用Backus-Naur Form (BNF)或Extended Backus-Naur Form (EBNF)。如果您希望在C#中轻松解析语言,请查看Irony这是C#的语言工具包,它允许您使用与EBNF非常相似的内容来描述语法。
除了这些语法之外,还有Parsing Expression Grammar (PEG)但我不相信它与BNF或EBNF一样普遍。