program    ->

external_declaration

| program external_declaration

<程序> ->  <外部声明> |  <程序>  <外部声明>

external_declaration ->      function_definition

| declaration

<外部声明>  ->   <函数定义>  |  <声明>

function_definition -> type_specifier declarator compound_statement

<函数定义>  ->  <说明符类型>  <声明> <复合语句>

type_specifier ->

VOID

| CHAR

| INT

| FLOAT

<说明符类型>  ->  <空类> | <字符型> |  <浮点型>

declarator

pointer direct_declarator

| direct_declarator

<声明> ->  <指针>  <直接说明符>  |  <直接说明符>

Pointerà

'*'

| '*' pointer

<指针> -> <*> | <*指针>

direct_declarator

IDENTIFIER

|direct_declarator’[‘ ‘]’

|direct_declarator ’[’ constant_expression ’]’

| IDENTIFIER '(' parameter_list ')'

| IDENTIFIER '('  ')'

|direct_declarator  ‘,’  identifier_list

<直接说明符>  -> <标识符>  |  <直接说明符  '['  ']'>   |  <直接标识符'[' 恒表达式 ']'>  |  <标识符'(' 参数名单 ')'>  |  <标识符'('  ')'>  |  <直接说明符 ';' 识别名单>

identifier_list

: IDENTIFIER

| identifier_list ',' IDENTIFIER

<识别名单> -> <标识符> |  <识别名单 ';' 标识符>

constant_expressionà

conditional_expression

<恒表达式> -> <恒表达式>

parameter_list à

parameter_declaration

| parameter_list ',' parameter_declaration

<参数名单> -> <参数声明> | <参数名单 ';' 参数声明>

parameter_declaration à

declaration_specifiers  IDENTIFIER

<参数声明>-><'说明符' '声明' '标识符'>

compound_statement à

'{' '}'

| '{' statement_list '}'

| '{' declaration_list statement_list '}'

<复合语句>-> <'{' '}'> | <'{'语句列表'}'> | <'{'声明' '语句列表' '}'>

declaration_list à

declaration

| declaration_list declaration

<声明_列表> -> <识别符> | <识别名单 识别符>

Declarationà

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

<初始化列表> -> <初始化>| <初始化列表 ',' 初始化器>

statement_listà

statement

| statement_list statement

<语句表> -> <语句> | <语句表 语句>

Statement à

| compound_statement

| expression_statement

| selection_statement

| iteration_statement

| jump_statement

<语句> -> |<复合语句> |<表达式语句>|<选择语句>|<迭代语句>|<跳转语句>

expression_statement à

';'

| expression ';'

<表达式语句> -> <';'> |<表达式 ';'>

selection_statement

: IF '(' expression ')' statement

| IF '(' expression ')' statement ELSE statement

<选择语句> :IF< '(' 表达式 ')' 语句> | IF <'(' 表达式 ')' 语句 ELSE 语句 >

iteration_statementà

WHILE '(' expression ')' statement

| FOR '(' expression_statement expression_statement ')' statement

| FOR '(' expression_statement expression_statement expression ')' statement

<迭代语句> -> WHILE< '(' 表达式  ')' 语句 >| FOR '(' 表达语句 表达语句 ')' 语句 | FOR '(' 表达语句 表达语句 表达式 ')' 语句

jump_statement

| CONTINUE ';'

| BREAK ';'

| RETURN ';'

| RETURN expression ';'

expression

: assignment_expression

| expression ',' assignment_expression

assignment_expression à

conditional_expression

| unary_expression assignment_operator assignment_expression

conditional_expression à

logical_or_expression

| logical_or_expression '?' expression ':' conditional_expression

logical_or_expression à

logical_and_expression

| logical_or_expression OR_OP logical_and_expression

logical_and_expression

: inclusive_or_expression

| logical_and_expression AND_OP 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 EQ_OP relational_expression

| equality_expression NE_OP relational_expression

relational_expression

: shift_expression

| relational_expression '<' shift_expression

| relational_expression '>' shift_expression

| relational_expression LE_OP shift_expression

| relational_expression GE_OP shift_expression

shift_expression

: additive_expression

| shift_expression LEFT_OP additive_expression

| shift_expression RIGHT_OP 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

| INC_OP unary_expression

| DEC_OP unary_expression

| unary_operator cast_expression

| SIZEOF unary_expression

| SIZEOF '(' type_name ')'

postfix_expression à

: primary_expression

| postfix_expression '[' expression ']'

| postfix_expression '(' ')'

| postfix_expression '(' argument_expression_list ')'

| postfix_expression '.' IDENTIFIER

| postfix_expression PTR_OP IDENTIFIER

| postfix_expression INC_OP

| postfix_expression DEC_OP

primary_expression à

IDENTIFIER

| CONSTANT

| STRING_LITERAL

| '(' expression ')'

argument_expression_list

: assignment_expression

| argument_expression_list ',' assignment_expression

unary_operator

: '&'

| '*'

| '+'

| '-'

| '~'

| '!'

assignment_operator à

'='

| MUL_ASSIGN

| DIV_ASSIGN

| MOD_ASSIGN

| ADD_ASSIGN

| SUB_ASSIGN

| LEFT_ASSIGN

| RIGHT_ASSIGN

| AND_ASSIGN

| XOR_ASSIGN

| OR_ASSIGN

storage_class_specifier à

TYPEDEF

| EXTERN

| STATIC

| AUTO

| REGISTER

struct_or_union_specifier

: struct_or_union IDENTIFIER '{' struct_declaration_list '}'

| struct_or_union '{' 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 specifier_qualifier_list

| type_specifier

| type_qualifier specifier_qualifier_list

| type_qualifier

struct_declarator_list à

struct_declarator

| struct_declarator_list ',' struct_declarator

struct_declarator à

: declarator

| ':' constant_expression

| declarator ':' constant_expression

enum_specifier à

ENUM '{' enumerator_list '}'

| ENUM IDENTIFIER '{' enumerator_list '}'

| ENUM IDENTIFIER

enumerator_list à

enumerator

| enumerator_list ',' enumerator

Enumerator à

IDENTIFIER

| IDENTIFIER '=' constant_expression

type_qualifier à

CONST

| VOLATILE

type_qualifier_list à

type_qualifier

| type_qualifier_list type_qualifier

parameter_type_list à

parameter_list

| parameter_list ',' ELLIPSIS

parameter_list à

: parameter_declaration

| parameter_list ',' parameter_declaration

type_name à

specifier_qualifier_list

| specifier_qualifier_list abstract_declarator

abstract_declarator à

pointer

| direct_abstract_declarator

| pointer direct_abstract_declarator

direct_abstract_declarator à

'(' abstract_declarator ')'

| '[' ']'

| '[' constant_expression ']'

| direct_abstract_declarator '[' ']'

| direct_abstract_declarator '[' constant_expression ']'

| '(' ')'

| '(' parameter_type_list ')'

| direct_abstract_declarator '(' ')'

| direct_abstract_declarator '(' parameter_type_list ')'

labeled_statement à

IDENTIFIER ':' statement

| CASE constant_expression ':' statement

| DEFAULT ':' statement

1029 C语言文法的更多相关文章

  1. 1029 C语言文法定义与C程序的推导过程

    1 阅读并理解提供给大家的C语言文法文件. 2 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 3 给出一段C程序,写出用上述文法产生这段C程序的推导过程. program → exte ...

  2. 1029 C语言文法翻译(2)

    program à external_declaration | program external_declaration 翻译:<源程序>→ <外部声明> | <源程序 ...

  3. 1029 C语言文法定义

    program à external_declaration | program external_declaration <源程序> ->  <外部声明> |  < ...

  4. C语言文法

    C语言文法 源程序 → 外部声明 | 子程序(外部声明) 外部声明   → 函数定义| 函数声明 函数定义 → 类型标识符(复合句) 标识符类型 → 无类型 | 字符型 | 整型 | 浮点型 整型→ ...

  5. 1014 C语言文法定义与C程序的推导过程 程序:冒泡算法C程序(语法树)

    阅读并理解提供给大家的C语言文法文件. 参考该文件写出一个自己好理解版的现实版的完整版的C语言文法. 给出一段C程序,画出用上述文法产生这段C程序的完整语法树. 程序:冒泡算法C程序 点此文字查看原图 ...

  6. 1029对c语言文法的理解

    <程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...

  7. 我的mini_c语言文法设计

    //这个文件主要是用来描述当前源语言的词法结构和语法结构 //当前语言是c语言的一个子集,因此里面所有的描述大家都很熟悉 //注意,当前语言并不支持预处理,因为c预处理比较复杂,而且楼主能力低下,因此 ...

  8. 消除左递归c语言文法

    <程序> -〉 <外部声明> | <函数定义><外部声明> -〉<头文件> | <变量> | <结构体> <头 ...

  9. 简单的C语言文法

    <程序>→<外部声明>|<程序><外部声明> <外部声明>→<函数定义>|<声明> <函数定义>→< ...

随机推荐

  1. jdk1.7的collections.sort(List list)排序问题

    1.7使用旧排序: System.setProperty("java.util.Arrays.useLegacyMergeSort", "true"); 1.7 ...

  2. php---实现保留小数点后两位

    PHP 中的 round() 函数可以实现 round() 函数对浮点数进行四舍五入. round(x,prec) 参数说明x 可选.规定要舍入的数字.prec 可选.规定小数点后的位数. 返回将 x ...

  3. eclipse根据.wsdl文件自动生成webservice的调用客户端

    1.工具:eclipse3.3或者是带有webservice插件的eclipse 2. 首先用浏览器访问webservice的站点,接着保存打开的页面,后缀为.wsdl. 3.把保存好的文件拷入ecl ...

  4. ArcGIS中添加进自定义的ttf字符标记符号

    原文:ArcGIS中添加进自定义的ttf字符标记符号 ArcGIS系统中的样式可能不能满足实际生产需要,为了实现快速制图,可自定义一些样式,以便重复利用. 1.   制作的符号库 使用 FontCre ...

  5. xcode5 和code6中push后方法执行的先后问题

    在xocde5中 执行的顺序是 prepareForSegue  .viewDidLoad. didSelectRowAtIndexPath,在xcode6中 执行的顺序是  prepareForSe ...

  6. Magento PHP Extension "curl" must be loaded解决方法

    我记得我第一次在xampp装magento的时候,进入后台时提示PHP Extension "curl" must be loaded 在网页上查了下原因和解决方法,发现是mage ...

  7. Appium 已支持中文输入

    Appium 1.3.3以上. java: capabilities增加下面两项: capabilities.setCapability("unicodeKeyboard", &q ...

  8. django 部署到 apache

    安装完django之后,每次都需要通过命令来启动启动开发服务器.虽然调试和测试方便,但只能在本地运行,并且不能承受许多用户同时使用的负载.所以需要将Django部署到生产级的服务器,这里选择apach ...

  9. C#资源释放

    转自:http://www.cnblogs.com/psunny/archive/2009/07/07/1518812.html 深刻理解C#中资源释放 今天我的一个朋友看到我写的那篇<C#中用 ...

  10. Metro之GridView控件的使用-绑定不同的模板样式显示

    最终实现的效果如下: 添加MenuDataSource.cs,字段ImageStyle是用来标识套用的样式 public class MenuGroup { public string GroupTi ...