在哪里可以找到实现编译器所需的完整 C 语法?



我的目的不是编写C编译器,但是我确实需要C编程语言的完整语法。这将允许我编写程序来更轻松地格式化、管理和分析 C 程序和库。为了实现这一目标,我别无选择,只能掌握该语言的整个语法。

语法应明确说明什么是有效的,什么是无效的。请考虑以下代码行:

int (x) = 0;

一个C程序员瞥了一眼这个语句可能会对它的有效性犹豫不决,直到他试图编译它,他可能不知道它实际上是有效的C。当然,很容易看出它等同于int x = 0;并且x周围的括号是多余的,但对于第一次看到它的程序员来说,它是否被允许并不清楚。

这是我对语言完整语法的要求。实现者必须使用它来编写可以编译任何 C 代码的编译器,即使我的意图不是编写编译器,但我的项目需要完整的语法详细信息。

C 标准在末尾列出了完整的语法。

在 http://www.lysator.liu.se/c/ANSI-C-grammar-y.html,它的形式是由yacc/bison编译的。

int (x) = 0;

是有效的,因为当您组合时

(6.7) declaration:
declaration-specifiers init-declarator-listopt ;
static_assert-declaration
(6.7) declaration-specifiers:
storage-class-specifier declaration-specifiersopt
type-specifier declaration-specifiersopt
type-qualifier declaration-specifiersopt
function-specifier declaration-specifiersopt
alignment-specifier declaration-specifiersopt
(6.7) init-declarator-list:
init-declarator
init-declarator-list , init-declarator
(6.7) init-declarator:
declarator
declarator = initializer

(6.7.6) declarator:
pointeropt direct-declarator
(6.7.6) direct-declarator:
identifier
( declarator )
direct-declarator [ type-qualifier-listopt assignment-expressionopt ]
direct-declarator [ static type-qualifier-listopt assignment-expression ]
direct-declarator [ type-qualifier-list static assignment-expression ]
direct-declarator [ type-qualifier-listopt * ]
direct-declarator ( parameter-type-list )
direct-declarator ( identifier-listopt )

然后xint x = 0;direct-declarator,语法允许在其周围使用括号(生产direct-declarator ::= ( declarator ))。

在标准中。你必须购买它或使用草稿。附件A描述了该语言的词汇语法。

最新更新