用英文定义一份c语言文法

时间: 2024-05-01 12:22:51 浏览: 13
Here is a possible definition of the C language grammar in English: ``` program -> translation-unit translation-unit -> external-declaration | translation-unit external-declaration external-declaration -> function-definition | declaration function-definition -> declaration-specifiers declarator declaration-list? compound-statement declaration-list -> declaration | declaration-list declaration declaration -> declaration-specifiers init-declarator-list? ; declaration-specifiers -> storage-class-specifier | type-specifier | type-qualifier | function-specifier | alignment-specifier storage-class-specifier -> typedef | extern | static | _Thread_local | auto | register type-specifier -> void | char | short | int | long | float | double | signed | unsigned | struct-or-union-specifier | enum-specifier | typedef-name struct-or-union-specifier -> struct-or-union identifier? { struct-declaration-list } | struct-or-union identifier struct-or-union -> struct | union struct-declaration-list -> struct-declaration | struct-declaration-list struct-declaration struct-declaration -> specifier-qualifier-list struct-declarator-list? ; specifier-qualifier-list -> type-specifier | type-qualifier | specifier-qualifier-list type-specifier | specifier-qualifier-list type-qualifier struct-declarator-list -> struct-declarator | struct-declarator-list , struct-declarator struct-declarator -> declarator? : constant-expression | declarator enum-specifier -> enum identifier? { enumerator-list } | enum identifier? { enumerator-list , } enumerator-list -> enumerator | enumerator-list , enumerator enumerator -> identifier | identifier = constant-expression type-qualifier -> const | restrict | volatile | _Atomic function-specifier -> inline | _Noreturn alignment-specifier -> _Alignas ( type-name | constant-expression ) init-declarator-list -> init-declarator | init-declarator-list , init-declarator init-declarator -> declarator | declarator = initializer initializer -> assignment-expression | { initializer-list } | { initializer-list , } initializer-list -> initializer | initializer-list , initializer declarator -> pointer? direct-declarator direct-declarator -> identifier | ( declarator ) | direct-declarator [ * ] | direct-declarator [ static type-qualifier-list? assignment-expression ] | direct-declarator [ type-qualifier-list static assignment-expression ] | direct-declarator [ type-qualifier-list? * ] | direct-declarator ( parameter-type-list? ) | direct-declarator ( identifier-list? ) pointer -> * type-qualifier-list? pointer? | * type-qualifier-list? type-qualifier-list -> type-qualifier | type-qualifier-list type-qualifier parameter-type-list -> parameter-list | parameter-list , ... parameter-list -> parameter-declaration | parameter-list , parameter-declaration parameter-declaration -> declaration-specifiers declarator | declaration-specifiers abstract-declarator? | declaration-specifiers identifier-list -> identifier | identifier-list , identifier type-name -> specifier-qualifier-list abstract-declarator? abstract-declarator -> pointer | direct-abstract-declarator | pointer direct-abstract-declarator direct-abstract-declarator -> ( abstract-declarator )? [ * ] | ( direct-abstract-declarator )? [ static type-qualifier-list? assignment-expression ] | ( direct-abstract-declarator )? [ type-qualifier-list static assignment-expression ] | ( direct-abstract-declarator )? [ type-qualifier-list? * ] | ( abstract-declarator )? ( parameter-type-list? ) | ( direct-abstract-declarator )? ( identifier-list? ) statement -> labeled-statement | compound-statement | expression-statement | selection-statement | iteration-statement | jump-statement labeled-statement -> identifier : statement | case constant-expression : statement | default : statement compound-statement -> { declaration-list? statement-list? } statement-list -> statement | statement-list statement expression-statement -> expression? ; selection-statement -> if ( expression ) statement | if ( expression ) statement else statement | switch ( expression ) statement iteration-statement -> while ( expression ) statement | do statement while ( expression ) ; | for ( expression? ; expression? ; expression? ) statement | for ( declaration expression? ; expression? ) statement jump-statement -> goto identifier ; | continue ; | break ; | return expression? ; expression -> assignment-expression | expression , assignment-expression assignment-expression -> conditional-expression | unary-expression assignment-operator assignment-expression assignment-operator -> = | *= | /= | %= | += | -= | <<= | >>= | &= | ^= | |= conditional-expression -> logical-or-expression | logical-or-expression ? expression : conditional-expression logical-or-expression -> logical-and-expression | logical-or-expression || logical-and-expression logical-and-expression -> inclusive-or-expression | logical-and-expression && inclusive-or-expression inclusive-or-expression -> exclusive-or-expression | inclusive-or-expression | exclusive-or-expression exclusive-or-expression -> and-expression | exclusive-or-expression ^ and-expression and-expression -> equality-expression | and-expression & equality-expression equality-expression -> relational-expression | equality-expression == relational-expression | equality-expression != relational-expression relational-expression -> shift-expression | relational-expression < shift-expression | relational-expression > shift-expression | relational-expression <= shift-expression | relational-expression >= shift-expression shift-expression -> additive-expression | shift-expression << additive-expression | shift-expression >> additive-expression additive-expression -> multiplicative-expression | additive-expression + multiplicative-expression | additive-expression - multiplicative-expression multiplicative-expression -> cast-expression | multiplicative-expression * cast-expression | multiplicative-expression / cast-expression | multiplicative-expression % cast-expression cast-expression -> unary-expression | ( type-name ) cast-expression unary-expression -> postfix-expression | ++ unary-expression | -- unary-expression | unary-operator cast-expression | sizeof unary-expression | sizeof ( type-name ) postfix-expression -> primary-expression | postfix-expression [ expression ] | postfix-expression ( argument-expression-list? ) | postfix-expression . identifier | postfix-expression -> identifier | postfix-expression ++ | postfix-expression -- primary-expression -> identifier | constant | string-literal | ( expression ) | generic-selection generic-selection -> _Generic ( assignment-expression , generic-assoc-list ) generic-assoc-list -> generic-association | generic-assoc-list , generic-association generic-association -> type-name : assignment-expression | default : assignment-expression constant -> integer-constant | floating-constant | enumeration-constant | character-constant integer-constant -> decimal-constant | octal-constant | hexadecimal-constant decimal-constant -> nonzero-digit decimal-constant? | 0 octal-constant -> 0 octal-constant? octal-digit hexadecimal-constant -> 0x hexadecimal-digit+ | 0X hexadecimal-digit+ floating-constant -> fractional-constant exponent-part? | digit-sequence exponent-part exponent-part -> e sign? digit-sequence | E sign? digit-sequence fractional-constant -> digit-sequence . digit-sequence? | . digit-sequence sign -> + | - digit-sequence -> digit | digit-sequence digit octal-digit -> 0..7 nonzero-digit -> 1..9 hexadecimal-digit -> digit | a..f | A..F character-constant -> ' c-char-sequence ' c-char-sequence -> c-char | c-char-sequence c-char c-char -> any character except ' and \ | escape-sequence escape-sequence -> \ ' | \ " | \ ? | \ \ | \ a | \ b | \ f | \ n | \ r | \ t | \ v | \ octal-digit | \ octal-digit octal-digit | \ octal-digit octal-digit octal-digit | \ x hexadecimal-digit+ | \ u hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit? | \ U hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit hexadecimal-digit? identifier -> nondigit | identifier nondigit | identifier digit nondigit -> _ | a..z | A..Z digit -> 0..9 ```

相关推荐

最新推荐

recommend-type

C语言统计一篇英文短文中单词的个数实例代码

本文通过实例代码给大家介绍的C语言统计一篇英文短文中单词的个数,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友参考下吧
recommend-type

利用C语言替换文件中某一行的方法

大家都知道C语言提供了文件操作,但是替换文件的某一行比较麻烦,下面是我使用的一个方法,现在分享给大家,有需要的朋友们可以参考借鉴。
recommend-type

详解C语言中的#define宏定义命令用法

有的时候为了程序的通用性,可以使用#define预处理宏定义命令,它的具体作用就是方便程序段的定义和修改,下面就来详解C语言中的#define宏定义命令用法.
recommend-type

C语言:一元多项式加减法运算(链表 附答案).docx

C语言链表的入门题,里面提供了两种思路供参考,用链表来实现一元多项式的加减法,并按照一定规律输出。也是练习链表和排序算法的一道小实验,初学链表的小伙伴可以参考参考噢
recommend-type

C语言(子集)的BNF文法描述

C语言(子集)的BNF文法描述,自己感觉还是挺全的,基本上把C语言中该有部分都包含在内了,,,下了绝对不会后悔的。。。。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB图像处理算法宝典:从理论到实战

![MATLAB图像处理算法宝典:从理论到实战](https://img-blog.csdnimg.cn/20200717112736401.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2d1emhhbzk5MDE=,size_16,color_FFFFFF,t_70) # 1. MATLAB图像处理基础理论 MATLAB图像处理是一种利用MATLAB编程语言进行图像处理的强大工具。它提供了丰富的函数和工具箱,用于图像获取、增强、分
recommend-type

matlab中1/x的非线性规划

在MATLAB中,可以使用非线性规划函数(`fmincon`)来优化一个包含1/x的非线性目标函数。下面是一个简单的例子: ```matlab % 定义目标函数 fun = @(x) 1/x; % 定义约束函数(这里没有约束) nonlcon = []; % 定义初始点 x0 = 1; % 定义优化选项 options = optimoptions('fmincon', 'Display', 'iter'); % 进行非线性规划 [x, fval] = fmincon(fun, x0, [], [], [], [], [], [], nonlcon, options); ``` 在
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。