|

楼主 |
发表于 2010-8-29 10:22:57
|
显示全部楼层
本帖最后由 VBProFan 于 2010-8-29 10:25 编辑
翻译、整理了一下,哇哈哈,C 语言程序就是由这68条产生式运算得到的:
1★开始符号 →
外部声明
| 开始符号 外部声明
2★外部声明 →
函数定义
| 声明
3★函数定义 →
声明标识符 声明符 声明列表 复合语句
| 声明标识符 声明符 复合语句
4★声明标识符 →
存储类型标识符
| 存储类型标识符 声明标识符
| 类型标识符
| 类型标识符 声明标识符
| 类型限定符
| 类型限定符 声明标识符
| 函数说明符
| 函数说明符 声明标识符
5★声明 →
声明标识符 ';'
| 声明标识符 初始化声明符列表 ';'
6★声明列表 →
声明
| 声明列表 声明
7★声明符 →
指针 直接声明符
| 直接声明符
8★直接声明符 →
IDENTIFIER
| '(' 声明符 ')'
| 直接声明符 '[' 类型限定符列表 赋值表达式 ']'
| 直接声明符 '[' 类型限定符列表 ']'
| 直接声明符 '[' 赋值表达式 ']'
| 直接声明符 '[' STATIC 类型限定符列表 赋值表达式 ']'
| 直接声明符 '[' 类型限定符列表 STATIC 赋值表达式 ']'
| 直接声明符 '[' 类型限定符列表 '*' ']'
| 直接声明符 '[' '*' ']'
| 直接声明符 '[' ']'
| 直接声明符 '(' 参数类型列表 ')'
| 直接声明符 '(' 标识符列表 ')'
| 直接声明符 '(' ')'
9★类型限定符列表 →
类型限定符
| 类型限定符列表 类型限定符
10★限定符列表 →
类型标识符 限定符列表
| 类型标识符
| 类型限定符 限定符列表
| 类型限定符
11★存储类型标识符 →
TYPEDEF
| EXTERN
| STATIC
| AUTO
| REGISTER
12★类型标识符 →
VOID
| CHAR
| SHORT
| INT
| LONG
| FLOAT
| DOUBLE
| SIGNED
| UNSIGNED
| BOOL
| COMPLEX
| IMAGINARY
| 结构联合标识符
| 枚举符
| 类型名
13★主表达式 →
IDENTIFIER
| CONSTANT
| STRING_LITERAL
| '(' 表达式 ')'
14★后缀表达式 →
主表达式
| 后缀表达式 '[' 表达式 ']'
| 后缀表达式 '(' ')'
| 后缀表达式 '(' 逗号表达式 ')'
| 后缀表达式 '.' IDENTIFIER
| 后缀表达式 PTR_OP IDENTIFIER
| 后缀表达式 INC_OP
| 后缀表达式 DEC_OP
| '(' 类型名 ')' '{' 初始化符列表 '}'
| '(' 类型名 ')' '{' 初始化符列表 ',' '}'
15★逗号表达式 →
赋值表达式
| 逗号表达式 ',' 赋值表达式
16★单目表达式 →
后缀表达式
| INC_OP 单目表达式
| DEC_OP 单目表达式
| 单目运算符 强制类型转换表达式
| SIZEOF 单目表达式
| SIZEOF '(' 类型名 ')'
17★单目运算符 →
'&'
| '*'
| '+'
| '-'
| '~'
| '!'
18★强制类型转换表达式 →
单目表达式
| '(' 类型名 ')' 强制类型转换表达式
19★乘除表达式 →
强制类型转换表达式
| 乘除表达式 '*' 强制类型转换表达式
| 乘除表达式 '/' 强制类型转换表达式
| 乘除表达式 '%' 强制类型转换表达式
20★加减法表达式 →
乘除表达式
| 加减法表达式 '+' 乘除表达式
| 加减法表达式 '-' 乘除表达式
21★移位表达式 →
加减法表达式
| 移位表达式 LEFT_OP 加减法表达式
| 移位表达式 RIGHT_OP 加减法表达式
22★关系式表达式 →
移位表达式
| 关系式表达式 '<' 移位表达式
| 关系式表达式 '>' 移位表达式
| 关系式表达式 LE_OP 移位表达式
| 关系式表达式 GE_OP 移位表达式
23★大小比较表达式 →
关系式表达式
| 大小比较表达式 EQ_OP 关系式表达式
| 大小比较表达式 NE_OP 关系式表达式
24★按位与表达式 →
大小比较表达式
| 按位与表达式 '&' 大小比较表达式
25★按位异或表达式 →
按位与表达式
| 按位异或表达式 '^' 按位与表达式
26★按位或表达式 →
按位异或表达式
| 按位或表达式 '|' 按位异或表达式
27★逻辑与表达式 →
按位或表达式
| 逻辑与表达式 AND_OP 按位或表达式
28★逻辑或表达式 →
按位与表达式
| 逻辑或表达式 OR_OP 按位与表达式
29★条件表达式 →
逻辑或表达式
| 逻辑或表达式 '?' 表达式 ':' 条件表达式
30★赋值表达式 →
条件表达式
| 单目表达式 赋值操作符 赋值表达式
31★赋值操作符 →
'='
| MUL_ASSIGN
| DIV_ASSIGN
| MOD_ASSIGN
| ADD_ASSIGN
| SUB_ASSIGN
| LEFT_ASSIGN
| RIGHT_ASSIGN
| AND_ASSIGN
| XOR_ASSIGN
| OR_ASSIGN
32★表达式 →
赋值表达式
| 表达式 ',' 赋值表达式
33★常量表达式 →
条件表达式
34★初始化声明符列表 →
初始化声明符
| 初始化声明符列表 ',' 初始化声明符
35★初始化声明符 →
声明符
| 声明符 '=' 初始化符
36★结构联合标识符 →
结构联合 IDENTIFIER '{' 结构定义列表 '}'
| 结构联合 '{' 结构定义列表 '}'
| 结构联合 IDENTIFIER
37★结构联合 →
STRUCT
| UNION
38★结构定义列表 →
结构声明
| 结构定义列表 结构声明
39★结构声明 →
限定符列表 结构声明符列表 ';'
40★结构声明符列表 →
结构声明符
| 结构声明符列表 ',' 结构声明符
41★结构声明符 →
声明符
| ':' 常量表达式
| 声明符 ':' 常量表达式
42★枚举符 →
ENUM '{' 枚举列表 '}'
| ENUM IDENTIFIER '{' 枚举列表 '}'
| ENUM '{' 枚举列表 ',' '}'
| ENUM IDENTIFIER '{' 枚举列表 ',' '}'
| ENUM IDENTIFIER
43★枚举列表 →
枚举
| 枚举列表 ',' 枚举
44★枚举 →
IDENTIFIER
| IDENTIFIER '=' 常量表达式
45★类型限定符 →
CONST
| RESTRICT
| VOLATILE
46★函数说明符 →
INLINE
47★指针 →
'*'
| '*' 类型限定符列表
| '*' 指针
| '*' 类型限定符列表 指针
48★参数类型列表 →
参数列表
| 参数列表 ',' ELLIPSIS
49★参数列表 →
参数声明
| 参数列表 ',' 参数声明
50★参数声明 →
声明标识符 声明符
| 声明标识符 抽象声明符
| 声明标识符
51★标识符列表 →
IDENTIFIER
| 标识符列表 ',' IDENTIFIER
52★类型名 →
限定符列表
| 限定符列表 抽象声明符
53★抽象声明符 →
指针
| 直接抽象声明符
| 指针 直接抽象声明符
54★直接抽象声明符 →
'(' 抽象声明符 ')'
| '[' ']'
| '[' 赋值表达式 ']'
| 直接抽象声明符 '[' ']'
| 直接抽象声明符 '[' 赋值表达式 ']'
| '[' '*' ']'
| 直接抽象声明符 '[' '*' ']'
| '(' ')'
| '(' 参数类型列表 ')'
| 直接抽象声明符 '(' ')'
| 直接抽象声明符 '(' 参数类型列表 ')'
55★初始化符 →
赋值表达式
| '{' 初始化符列表 '}'
| '{' 初始化符列表 ',' '}'
56★初始化符列表 →
初始化符
| 指示 初始化符
| 初始化符列表 ',' 初始化符
| 初始化符列表 ',' 指示 初始化符
57★指示 →
指示符列表 '='
58★指示符列表 →
指示符
| 指示符列表 指示符
59★指示符 →
'[' 常量表达式 ']'
| '.' IDENTIFIER
60★语句 →
标号语句
| 复合语句
| 表达式语句
| 分支语句
| 循环语句
| 跳转语句
61★标号语句 →
IDENTIFIER ':' 语句
| CASE 常量表达式 ':' 语句
| DEFAULT ':' 语句
62★复合语句 →
'{' '}'
| '{' 语句块序列 '}'
63★语句块序列 →
语句块项目
| 语句块序列 语句块项目
64★语句块项目 →
声明
| 语句
65★表达式语句 →
';'
| 表达式 ';'
66★分支语句 →
IF '(' 表达式 ')' 语句
| IF '(' 表达式 ')' 语句 ELSE 语句
| SWITCH '(' 表达式 ')' 语句
67★循环语句 →
WHILE '(' 表达式 ')' 语句
| DO 语句 WHILE '(' 表达式 ')' ';'
| FOR '(' 表达式语句 表达式语句 ')' 语句
| FOR '(' 表达式语句 表达式语句 表达式 ')' 语句
| FOR '(' 声明 表达式语句 ')' 语句
| FOR '(' 声明 表达式语句 表达式 ')' 语句
68★跳转语句 →
GOTO IDENTIFIER ';'
| CONTINUE ';'
| BREAK ';'
| RETURN ';'
| RETURN 表达式 ';'
如果哪里翻译有误或者有更准确的表达方式,欢迎大家指出:) |
|