C语法归约之数组和指针(1)

上一篇,开始了语法归约,给出变量声明定义初始化归约过程,和c99文法图,请查阅这里,相关文法图在这里依然要使用

1、数组归约

1.1、示例代码
int a[10];
int a[2][3];
int a[2][3][4];

struct AA boy[100];
struct AA boy[100][100];
union BB girl[10];
1.2、归约过程
curr: int  next: a  
type-specifier 
declaration-specifiers 

curr: ID  next: [  
declaration-specifiers direct-declarator 

curr: [  next: 10  

curr: 10  next: ]  
declaration-specifiers direct-declarator [ primary-expression 
declaration-specifiers direct-declarator [ postfix-expression 
declaration-specifiers direct-declarator [ unary-expression 
declaration-specifiers direct-declarator [ cast-expression 
declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-specifiers direct-declarator [ additive-expression 
declaration-specifiers direct-declarator [ shift-expression 
declaration-specifiers direct-declarator [ relational-expression 
declaration-specifiers direct-declarator [ equality-expression 
declaration-specifiers direct-declarator [ AND-expression 
declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-specifiers direct-declarator [ conditional-expression 
declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-specifiers direct-declarator 
declaration-specifiers declarator 
declaration-specifiers init-declarator 
declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration 
declaration-list 

curr: int  next: a  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: ID  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 2  

curr: 2  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 3  

curr: 3  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration-list declaration 
declaration-list 

curr: int  next: a  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: ID  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 2  

curr: 2  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 3  

curr: 3  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 4  

curr: 4  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: boy  next: ID  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: ID  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 100  

curr: 100  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: boy  next: ID  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: ID  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 100  

curr: 100  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 100  

curr: 100  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: union  
declaration-list declaration 
declaration-list 

curr: union  next: BB  

curr: girl  next: ID  
declaration-list union-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: ID  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 10  

curr: 10  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: NULL  
declaration-list declaration 
declaration-list 
translation-unit 
1.3、总结说明
无论数组是多少维度,每个维度的归约过程都是一样一样的!没有区别。由于(expression),id, string, 常量会归约到primary-expression。因此,从文法上讲,数组的定义中可以出现表达式和变量。但是后期编译要为数组分配空间,而变量需要计算才能知道大小,因此是不能在数组定义时候使用变量的!

2、指针归约

2.1、示例代码
static int *ip;
signed char *str;
char **str;
void *vp;
int *a;
int ****a;
struct AA *boy;
struct AA **boy;
struct AA ****boy;
union BB *girl;
union BB **girl;
2.2、归约过程
curr: static  next: int  
storage-class-specifier 

curr: int  next: *  
storage-class-specifier type-specifier 
storage-class-specifier declaration-specifiers 
declaration-specifiers 

curr: *  next: ip  
declaration-specifiers pointer 

curr: ID  next: ;  
declaration-specifiers pointer direct-declarator 
declaration-specifiers declarator 
declaration-specifiers init-declarator 
declaration-specifiers init-declarator-list 

curr: ;  next: signed  
declaration 
declaration-list 

curr: signed  next: char  
declaration-list type-specifier 

curr: char  next: *  
declaration-list type-specifier type-specifier 
declaration-list type-specifier declaration-specifiers 
declaration-list declaration-specifiers 

curr: *  next: str  
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: char  
declaration-list declaration 
declaration-list 

curr: char  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: str  
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: void  
declaration-list declaration 
declaration-list 

curr: void  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: vp  
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration-list declaration 
declaration-list 

curr: int  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: a  
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration-list declaration 
declaration-list 

curr: int  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: *  

curr: *  next: *  

curr: *  next: a  
declaration-list declaration-specifiers * * * pointer 
declaration-list declaration-specifiers * * pointer 
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: *  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: boy  
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: *  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: boy  
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: *  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: *  

curr: *  next: *  

curr: *  next: boy  
declaration-list declaration-specifiers * * * pointer 
declaration-list declaration-specifiers * * pointer 
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: union  
declaration-list declaration 
declaration-list 

curr: union  next: BB  

curr: ID  next: *  
declaration-list union-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: girl  
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: union  
declaration-list declaration 
declaration-list 

curr: union  next: BB  

curr: ID  next: *  
declaration-list union-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: girl  
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: NULL  
declaration-list declaration 
declaration-list 
translation-unit 
2.3、总结说明
指针定义前面挂多少个星都无妨,只要你愿意挂千万,文法照样解析。只是使用产生式poiner->*pointer迭代次数多点而已!

3、指针和数组的一起归约

3.1、示例代码
int *a[11];
int (**a)[5];
int (*a)[5][4];
int *a[11][22];
char **a[2];
char ***a[2];
struct AA *boy[11];
struct AA **boy[11][22];
struct AA (*boy)[11];
struct AA (**boy)[11];
union BB *girl[10][22];
union BB **girl[10];
3.2、归约过程
curr: int  next: *  
type-specifier 
declaration-specifiers 

curr: *  next: a  
declaration-specifiers pointer 

curr: ID  next: [  
declaration-specifiers pointer direct-declarator 

curr: [  next: 11  

curr: 11  next: ]  
declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-specifiers pointer direct-declarator 
declaration-specifiers declarator 
declaration-specifiers init-declarator 
declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration 
declaration-list 

curr: int  next: (  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: (  next: *  

curr: *  next: *  

curr: *  next: a  
declaration-list declaration-specifiers ( * pointer 
declaration-list declaration-specifiers ( pointer 

curr: ID  next: )  
declaration-list declaration-specifiers ( pointer direct-declarator 
declaration-list declaration-specifiers ( declarator 

curr: )  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 5  

curr: 5  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration-list declaration 
declaration-list 

curr: int  next: (  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: (  next: *  

curr: *  next: a  
declaration-list declaration-specifiers ( pointer 

curr: ID  next: )  
declaration-list declaration-specifiers ( pointer direct-declarator 
declaration-list declaration-specifiers ( declarator 

curr: )  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 5  

curr: 5  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 4  

curr: 4  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: int  
declaration-list declaration 
declaration-list 

curr: int  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: a  
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 11  

curr: 11  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 22  

curr: 22  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: char  
declaration-list declaration 
declaration-list 

curr: char  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: a  
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 2  

curr: 2  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: char  
declaration-list declaration 
declaration-list 

curr: char  next: *  
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: *  

curr: *  next: a  
declaration-list declaration-specifiers * * pointer 
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 2  

curr: 2  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: *  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: boy  
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 11  

curr: 11  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: *  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: boy  
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 11  

curr: 11  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 22  

curr: 22  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: (  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: (  next: *  

curr: *  next: boy  
declaration-list declaration-specifiers ( pointer 

curr: ID  next: )  
declaration-list declaration-specifiers ( pointer direct-declarator 
declaration-list declaration-specifiers ( declarator 

curr: )  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 11  

curr: 11  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: struct  
declaration-list declaration 
declaration-list 

curr: struct  next: AA  

curr: ID  next: (  
declaration-list struct-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: (  next: *  

curr: *  next: *  

curr: *  next: boy  
declaration-list declaration-specifiers ( * pointer 
declaration-list declaration-specifiers ( pointer 

curr: ID  next: )  
declaration-list declaration-specifiers ( pointer direct-declarator 
declaration-list declaration-specifiers ( declarator 

curr: )  next: [  
declaration-list declaration-specifiers direct-declarator 

curr: [  next: 11  

curr: 11  next: ]  
declaration-list declaration-specifiers direct-declarator [ primary-expression 
declaration-list declaration-specifiers direct-declarator [ postfix-expression 
declaration-list declaration-specifiers direct-declarator [ unary-expression 
declaration-list declaration-specifiers direct-declarator [ cast-expression 
declaration-list declaration-specifiers direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers direct-declarator [ additive-expression 
declaration-list declaration-specifiers direct-declarator [ shift-expression 
declaration-list declaration-specifiers direct-declarator [ relational-expression 
declaration-list declaration-specifiers direct-declarator [ equality-expression 
declaration-list declaration-specifiers direct-declarator [ AND-expression 
declaration-list declaration-specifiers direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers direct-declarator [ conditional-expression 
declaration-list declaration-specifiers direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: union  
declaration-list declaration 
declaration-list 

curr: union  next: BB  

curr: ID  next: *  
declaration-list union-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: girl  
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 10  

curr: 10  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 22  

curr: 22  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: union  
declaration-list declaration 
declaration-list 

curr: union  next: BB  

curr: ID  next: *  
declaration-list union-specifier 
declaration-list type-specifier 
declaration-list declaration-specifiers 

curr: *  next: *  

curr: *  next: girl  
declaration-list declaration-specifiers * pointer 
declaration-list declaration-specifiers pointer 

curr: ID  next: [  
declaration-list declaration-specifiers pointer direct-declarator 

curr: [  next: 10  

curr: 10  next: ]  
declaration-list declaration-specifiers pointer direct-declarator [ primary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ postfix-expression 
declaration-list declaration-specifiers pointer direct-declarator [ unary-expression 
declaration-list declaration-specifiers pointer direct-declarator [ cast-expression 
declaration-list declaration-specifiers pointer direct-declarator [ multiplicative-expression 
declaration-list declaration-specifiers pointer direct-declarator [ additive-expression 
declaration-list declaration-specifiers pointer direct-declarator [ shift-expression 
declaration-list declaration-specifiers pointer direct-declarator [ relational-expression 
declaration-list declaration-specifiers pointer direct-declarator [ equality-expression 
declaration-list declaration-specifiers pointer direct-declarator [ AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ exclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ inclusive-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-AND-expression 
declaration-list declaration-specifiers pointer direct-declarator [ logical-OR-expression 
declaration-list declaration-specifiers pointer direct-declarator [ conditional-expression 
declaration-list declaration-specifiers pointer direct-declarator [ assignment-expression 

curr: ]  next: ;  
declaration-list declaration-specifiers pointer direct-declarator 
declaration-list declaration-specifiers declarator 
declaration-list declaration-specifiers init-declarator 
declaration-list declaration-specifiers init-declarator-list 

curr: ;  next: NULL  
declaration-list declaration 
declaration-list 
translation-unit 
3.3、总结说明
(*a)*a 都归约到direct-declarator。它的区分在归约过程上,以及后期类型解析上!


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数组归约是指将一个数组的所有元素经过某种操作后,得到一个最终结果的过程。例如,将一个数组的所有元素相加,就是一种数组归约操作。在CUDA,可以使用reduce函数来实现数组归约。 示例代码如下: ```cuda #include <stdio.h> #define N 1024 __global__ void reduce(int *g_idata, int *g_odata) { extern __shared__ int sdata[]; // 每个线程加载一个元素到共享内存 unsigned int tid = threadIdx.x; unsigned int i = blockIdx.x * blockDim.x + threadIdx.x; sdata[tid] = g_idata[i]; __syncthreads(); // 归约操作 for (unsigned int s = blockDim.x / 2; s > 0; s >>= 1) { if (tid < s) { sdata[tid] += sdata[tid + s]; } __syncthreads(); } // 将归约结果存储到全局内存 if (tid == 0) { g_odata[blockIdx.x] = sdata[0]; } } int main(void) { int *a, *d_a, *d_b; int size = N * sizeof(int); // 分配内存空间 a = (int *)malloc(size); cudaMalloc((void **)&d_a, size); cudaMalloc((void **)&d_b, size); // 初始化数组 for (int i = 0; i < N; i++) { a[i] = i; } // 将数组复制到设备上 cudaMemcpy(d_a, a, size, cudaMemcpyHostToDevice); // 归约操作 int block_size = 512; reduce<<<(N + block_size - 1) / block_size, block_size, block_size * sizeof(int)>>>(d_a, d_b); // 将结果从设备上复制回主机内存 int result; cudaMemcpy(&result, d_b, sizeof(int), cudaMemcpyDeviceToHost); printf("sum: %d\n", result); // 释放内存空间 free(a); cudaFree(d_a); cudaFree(d_b); return 0; } ``` 在上面的示例代码,首先定义了一个大小为N的整型数组a,然后将该数组复制到设备上。接着定义了一个reduce函数,该函数使用共享内存实现了数组归约操作。最后,在主函数调用reduce函数进行归约操作,并将结果从设备上复制回主机内存。最终,输出结果即为数组所有元素的和。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值