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

mac*_*e_1 4 c syntax implementation parsing lexical-analysis

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

语法应清楚地说明什么是有效的和什么是无效的.考虑以下代码行:

int (x) = 0;
Run Code Online (Sandbox Code Playgroud)

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

这是关于语言的完整语法我需要的详细程度.实现者必须足以使用它来编写可编译任何C代码的编译器,即使我的目的不是编写编译器,但我的项目需要完整的语法细节.

PSk*_*cik 6

C标准列出完整的语法底.

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

int (x) = 0;
Run Code Online (Sandbox Code Playgroud)

是有效的,因为当你结合

(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
Run Code Online (Sandbox Code Playgroud)

(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 )
Run Code Online (Sandbox Code Playgroud)

然后xint x = 0;is direct-declarator和语法允许括号围绕它(生产direct-declarator ::= ( declarator )).