首页 > 代码库 > C语法归约之语句(5)

C语法归约之语句(5)

这是语法归约最后一部分了,后面文法当中还有个外部归约。它已经在前面以及这里都提及到了,也就是把全局声明定义和函数定义整合的过程,最后归约成一颗完整的树。根结点就是translation-unit,因此不再单独示例!


示例代码

void foo()
{
start:
	for(i = 1; i < NR; ++i) { 
		if(i % 13 == 0)
			goto start;
	}
}

void foo()
{
	a = b + c;
	return;
}

void foo()
{
	if(a < 0)
		a = -a;
	else
		a = 1;

	if(a > 0)
		a = 1;
	else if(a < 0)
		a = -1;
	else
		a = 0;

	switch(a) {
		case 1:
			break;
		case 2:
			{
				a *= a;
				break;
			}
		default:
			{
				a = a + 2;
				break;
			}
	}
}

void foo()
{
	for(i = 0; i < NR; ++i) { 
		i += 2;
	}

	for(;;) {
		++i;
		if(i == 10)
			break;
	}

	while(1) {
		if(i == 10)
			break;
		if(i == 5)
			continue;
		++i;
	}

	do {
		++i;
	}while(i < 10);

}

int foo()
{
	return 1;
}

归约过程

curr[1]: void  next[73]: foo  
type-specifier 
declaration-specifiers 

curr[73]: ID  next[67]: (  
declaration-specifiers direct-declarator 

curr[67]: (  next[68]: )  

curr[68]: )  next[65]: {  
declaration-specifiers direct-declarator 
declaration-specifiers declarator 

curr[65]: {  next[73]: start  

curr[73]: ID  next[52]: :  

curr[52]: :  next[22]: for  

curr[22]: for  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[53]: =  
declaration-specifiers declarator { ID : for ( primary-expression 
declaration-specifiers declarator { ID : for ( postfix-expression 
declaration-specifiers declarator { ID : for ( unary-expression 

curr[53]: =  next[74]: 1  
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator 

curr[74]: 1  next[72]: ;  
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { ID : for ( unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { ID : for ( assignment-expression 
declaration-specifiers declarator { ID : for ( expression 

curr[72]: ;  next[73]: i  

curr[73]: ID  next[40]: <  
declaration-specifiers declarator { ID : for ( expression ; primary-expression 
declaration-specifiers declarator { ID : for ( expression ; postfix-expression 
declaration-specifiers declarator { ID : for ( expression ; unary-expression 
declaration-specifiers declarator { ID : for ( expression ; cast-expression 
declaration-specifiers declarator { ID : for ( expression ; multiplicative-expression 
declaration-specifiers declarator { ID : for ( expression ; additive-expression 
declaration-specifiers declarator { ID : for ( expression ; shift-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression 

curr[40]: <  next[73]: NR  

curr[73]: ID  next[72]: ;  
declaration-specifiers declarator { ID : for ( expression ; relational-expression < primary-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression < postfix-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression < unary-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression < cast-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression < multiplicative-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression < additive-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression < shift-expression 
declaration-specifiers declarator { ID : for ( expression ; relational-expression 
declaration-specifiers declarator { ID : for ( expression ; equality-expression 
declaration-specifiers declarator { ID : for ( expression ; AND-expression 
declaration-specifiers declarator { ID : for ( expression ; exclusive-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; inclusive-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; logical-AND-expression 
declaration-specifiers declarator { ID : for ( expression ; logical-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; conditional-expression 
declaration-specifiers declarator { ID : for ( expression ; assignment-expression 
declaration-specifiers declarator { ID : for ( expression ; expression 

curr[72]: ;  next[28]: ++  

curr[28]: ++  next[73]: i  

curr[73]: ID  next[68]: )  
declaration-specifiers declarator { ID : for ( expression ; expression ; ++ primary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; ++ postfix-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; ++ unary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; unary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; cast-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; multiplicative-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; additive-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; shift-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; relational-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; equality-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; AND-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; exclusive-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; inclusive-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; logical-AND-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; logical-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; conditional-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; assignment-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression 

curr[68]: )  next[65]: {  

curr[65]: {  next[23]: if  

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[35]: %  
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( primary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( postfix-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( unary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( cast-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( multiplicative-expression 

curr[35]: %  next[74]: 13  

curr[74]: 13  next[44]: ==  
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( multiplicative-expression % primary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( multiplicative-expression % postfix-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( multiplicative-expression % unary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( multiplicative-expression % cast-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( multiplicative-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( additive-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( shift-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( relational-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression 

curr[44]: ==  next[74]: 0  

curr[74]: 0  next[68]: )  
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == primary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == postfix-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == unary-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == cast-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == multiplicative-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == additive-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == shift-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression == relational-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( equality-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( AND-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( exclusive-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( inclusive-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( logical-AND-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( logical-OR-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( conditional-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( assignment-expression 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( expression 

curr[68]: )  next[14]: goto  

curr[14]: goto  next[73]: start  

curr[73]: ID  next[72]: ;  

curr[72]: ;  next[66]: }  
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( expression ) jump-statement 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { if ( expression ) statement 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { selection-statement 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { statement 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { block-item 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) { block-item-list 

curr[66]: }  next[66]: }  
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) compound-statement 
declaration-specifiers declarator { ID : for ( expression ; expression ; expression ) statement 
declaration-specifiers declarator { ID : iteration-statement 
declaration-specifiers declarator { ID : statement 
declaration-specifiers declarator { labeled-statement 
declaration-specifiers declarator { statement 
declaration-specifiers declarator { block-item 
declaration-specifiers declarator { block-item-list 

curr[66]: }  next[1]: void  
declaration-specifiers declarator compound-statement 
function-definition 
function-definition-list 

curr[1]: void  next[73]: foo  
function-definition-list type-specifier 
function-definition-list declaration-specifiers 

curr[73]: ID  next[67]: (  
function-definition-list declaration-specifiers direct-declarator 

curr[67]: (  next[68]: )  

curr[68]: )  next[65]: {  
function-definition-list declaration-specifiers direct-declarator 
function-definition-list declaration-specifiers declarator 

curr[65]: {  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { primary-expression 
function-definition-list declaration-specifiers declarator { postfix-expression 
function-definition-list declaration-specifiers declarator { unary-expression 

curr[53]: =  next[73]: b  
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator 

curr[73]: ID  next[36]: +  
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression 

curr[36]: +  next[73]: c  

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression + primary-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression + postfix-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression + unary-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression + cast-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression + multiplicative-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { assignment-expression 
function-definition-list declaration-specifiers declarator { expression 

curr[72]: ;  next[17]: return  
function-definition-list declaration-specifiers declarator { expression-statement 
function-definition-list declaration-specifiers declarator { statement 
function-definition-list declaration-specifiers declarator { block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[17]: return  next[72]: ;  

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[66]: }  next[1]: void  
function-definition-list declaration-specifiers declarator compound-statement 
function-definition-list function-definition 
function-definition-list 

curr[1]: void  next[73]: foo  
function-definition-list type-specifier 
function-definition-list declaration-specifiers 

curr[73]: ID  next[67]: (  
function-definition-list declaration-specifiers direct-declarator 

curr[67]: (  next[68]: )  

curr[68]: )  next[65]: {  
function-definition-list declaration-specifiers direct-declarator 
function-definition-list declaration-specifiers declarator 

curr[65]: {  next[23]: if  

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: a  

curr[73]: ID  next[40]: <  
function-definition-list declaration-specifiers declarator { if ( primary-expression 
function-definition-list declaration-specifiers declarator { if ( postfix-expression 
function-definition-list declaration-specifiers declarator { if ( unary-expression 
function-definition-list declaration-specifiers declarator { if ( cast-expression 
function-definition-list declaration-specifiers declarator { if ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { if ( additive-expression 
function-definition-list declaration-specifiers declarator { if ( shift-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression 

curr[40]: <  next[74]: 0  

curr[74]: 0  next[68]: )  
function-definition-list declaration-specifiers declarator { if ( relational-expression < primary-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression < postfix-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression < unary-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression < cast-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression < multiplicative-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression < additive-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression < shift-expression 
function-definition-list declaration-specifiers declarator { if ( relational-expression 
function-definition-list declaration-specifiers declarator { if ( equality-expression 
function-definition-list declaration-specifiers declarator { if ( AND-expression 
function-definition-list declaration-specifiers declarator { if ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { if ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { if ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { if ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { if ( conditional-expression 
function-definition-list declaration-specifiers declarator { if ( assignment-expression 
function-definition-list declaration-specifiers declarator { if ( expression 

curr[68]: )  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { if ( expression ) primary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) postfix-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression 

curr[53]: =  next[37]: -  
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator 

curr[37]: -  next[73]: a  
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator unary-operator 

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator unary-operator primary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator unary-operator postfix-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator unary-operator unary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator unary-operator cast-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) assignment-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) expression 

curr[72]: ;  next[24]: else  
function-definition-list declaration-specifiers declarator { if ( expression ) expression-statement 
function-definition-list declaration-specifiers declarator { if ( expression ) statement 

curr[24]: else  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { if ( expression ) statement else primary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else postfix-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression 

curr[53]: =  next[74]: 1  
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator 

curr[74]: 1  next[72]: ;  
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else assignment-expression 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else expression 

curr[72]: ;  next[23]: if  
function-definition-list declaration-specifiers declarator { if ( expression ) statement else expression-statement 
function-definition-list declaration-specifiers declarator { if ( expression ) statement else statement 
function-definition-list declaration-specifiers declarator { selection-statement 
function-definition-list declaration-specifiers declarator { statement 
function-definition-list declaration-specifiers declarator { block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: a  

curr[73]: ID  next[41]: >  
function-definition-list declaration-specifiers declarator { block-item-list if ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression 

curr[41]: >  next[74]: 0  

curr[74]: 0  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression > shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression 

curr[68]: )  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression 

curr[53]: =  next[74]: 1  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator 

curr[74]: 1  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) expression 

curr[72]: ;  next[24]: else  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement 

curr[24]: else  next[23]: if  

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: a  

curr[73]: ID  next[40]: <  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression 

curr[40]: <  next[74]: 0  

curr[74]: 0  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression < shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression 

curr[68]: )  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression 

curr[53]: =  next[37]: -  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator 

curr[37]: -  next[74]: 1  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator unary-operator 

curr[74]: 1  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator unary-operator primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator unary-operator postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator unary-operator unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator unary-operator cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) expression 

curr[72]: ;  next[24]: else  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement 

curr[24]: else  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression 

curr[53]: =  next[74]: 0  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator 

curr[74]: 0  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else expression 

curr[72]: ;  next[25]: switch  
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else if ( expression ) statement else statement 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else selection-statement 
function-definition-list declaration-specifiers declarator { block-item-list if ( expression ) statement else statement 
function-definition-list declaration-specifiers declarator { block-item-list selection-statement 
function-definition-list declaration-specifiers declarator { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[25]: switch  next[67]: (  

curr[67]: (  next[73]: a  

curr[73]: ID  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list switch ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression 

curr[68]: )  next[65]: {  

curr[65]: {  next[18]: case  

curr[18]: case  next[74]: 1  

curr[74]: 1  next[52]: :  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case constant-expression 

curr[52]: :  next[16]: break  

curr[16]: break  next[72]: ;  

curr[72]: ;  next[18]: case  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case constant-expression : jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case constant-expression : statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list 

curr[18]: case  next[74]: 2  

curr[74]: 2  next[52]: :  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression 

curr[52]: :  next[65]: {  

curr[65]: {  next[73]: a  

curr[73]: ID  next[56]: *=  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression 

curr[56]: *=  next[73]: a  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator 

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { expression 

curr[72]: ;  next[16]: break  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { block-item 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { block-item-list 

curr[16]: break  next[72]: ;  

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { block-item-list jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : { block-item-list 

curr[66]: }  next[19]: default  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : compound-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case constant-expression : statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list case-labeled-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list 

curr[19]: default  next[52]: :  

curr[52]: :  next[65]: {  

curr[65]: {  next[73]: a  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression 

curr[53]: =  next[73]: a  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator 

curr[73]: ID  next[36]: +  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression 

curr[36]: +  next[74]: 2  

curr[74]: 2  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression + primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression + postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression + unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression + cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression + multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { expression 

curr[72]: ;  next[16]: break  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { block-item 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { block-item-list 

curr[16]: break  next[72]: ;  

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { block-item-list jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : { block-item-list 

curr[66]: }  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : compound-statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-labeled-statement-list default : statement 
function-definition-list declaration-specifiers declarator { block-item-list switch ( expression ) { case-block 

curr[66]: }  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list selection-statement 
function-definition-list declaration-specifiers declarator { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[66]: }  next[1]: void  
function-definition-list declaration-specifiers declarator compound-statement 
function-definition-list function-definition 
function-definition-list 

curr[1]: void  next[73]: foo  
function-definition-list type-specifier 
function-definition-list declaration-specifiers 

curr[73]: ID  next[67]: (  
function-definition-list declaration-specifiers direct-declarator 

curr[67]: (  next[68]: )  

curr[68]: )  next[65]: {  
function-definition-list declaration-specifiers direct-declarator 
function-definition-list declaration-specifiers declarator 

curr[65]: {  next[22]: for  

curr[22]: for  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[53]: =  
function-definition-list declaration-specifiers declarator { for ( primary-expression 
function-definition-list declaration-specifiers declarator { for ( postfix-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression 

curr[53]: =  next[74]: 0  
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator 

curr[74]: 0  next[72]: ;  
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { for ( unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { for ( assignment-expression 
function-definition-list declaration-specifiers declarator { for ( expression 

curr[72]: ;  next[73]: i  

curr[73]: ID  next[40]: <  
function-definition-list declaration-specifiers declarator { for ( expression ; primary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; postfix-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; unary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; cast-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; multiplicative-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; additive-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; shift-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression 

curr[40]: <  next[73]: NR  

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < primary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < postfix-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < unary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < cast-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < multiplicative-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < additive-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression < shift-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; relational-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; equality-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; AND-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; logical-AND-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; logical-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; conditional-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; assignment-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression 

curr[72]: ;  next[28]: ++  

curr[28]: ++  next[73]: i  

curr[73]: ID  next[68]: )  
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; ++ primary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; ++ postfix-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; ++ unary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; unary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; cast-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; multiplicative-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; additive-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; shift-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; relational-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; equality-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; AND-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; logical-AND-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; logical-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; conditional-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; assignment-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression 

curr[68]: )  next[65]: {  

curr[65]: {  next[73]: i  

curr[73]: ID  next[54]: +=  
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { primary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { postfix-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression 

curr[54]: +=  next[74]: 2  
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator 

curr[74]: 2  next[72]: ;  
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator primary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator postfix-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator unary-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator cast-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator multiplicative-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator additive-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator shift-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator relational-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator equality-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator AND-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator logical-AND-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator logical-OR-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator conditional-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { unary-expression assignment-operator assignment-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { assignment-expression 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { expression 

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { expression-statement 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { statement 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { block-item 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) { block-item-list 

curr[66]: }  next[22]: for  
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) compound-statement 
function-definition-list declaration-specifiers declarator { for ( expression ; expression ; expression ) statement 
function-definition-list declaration-specifiers declarator { iteration-statement 
function-definition-list declaration-specifiers declarator { statement 
function-definition-list declaration-specifiers declarator { block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[22]: for  next[67]: (  

curr[67]: (  next[72]: ;  

curr[72]: ;  next[72]: ;  

curr[72]: ;  next[68]: )  

curr[68]: )  next[65]: {  

curr[65]: {  next[28]: ++  

curr[28]: ++  next[73]: i  

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { ++ primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { ++ postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { ++ unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { expression 

curr[72]: ;  next[23]: if  
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list 

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[44]: ==  
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression 

curr[44]: ==  next[74]: 10  

curr[74]: 10  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression == relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( expression 

curr[68]: )  next[16]: break  

curr[16]: break  next[72]: ;  

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( expression ) jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list if ( expression ) statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list selection-statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) { block-item-list 

curr[66]: }  next[21]: while  
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) compound-statement 
function-definition-list declaration-specifiers declarator { block-item-list for ( ; ; ) statement 
function-definition-list declaration-specifiers declarator { block-item-list iteration-statement 
function-definition-list declaration-specifiers declarator { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[21]: while  next[67]: (  

curr[67]: (  next[74]: 1  

curr[74]: 1  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list while ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression 

curr[68]: )  next[65]: {  

curr[65]: {  next[23]: if  

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[44]: ==  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression 

curr[44]: ==  next[74]: 10  

curr[74]: 10  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression == relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( expression 

curr[68]: )  next[16]: break  

curr[16]: break  next[72]: ;  

curr[72]: ;  next[23]: if  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( expression ) jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { if ( expression ) statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { selection-statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list 

curr[23]: if  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[44]: ==  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression 

curr[44]: ==  next[74]: 5  

curr[74]: 5  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression == relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( expression 

curr[68]: )  next[15]: continue  

curr[15]: continue  next[72]: ;  

curr[72]: ;  next[28]: ++  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( expression ) jump-statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list if ( expression ) statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list selection-statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list 

curr[28]: ++  next[73]: i  

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list ++ primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list ++ postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list ++ unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list expression 

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) { block-item-list 

curr[66]: }  next[20]: do  
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) compound-statement 
function-definition-list declaration-specifiers declarator { block-item-list while ( expression ) statement 
function-definition-list declaration-specifiers declarator { block-item-list iteration-statement 
function-definition-list declaration-specifiers declarator { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[20]: do  next[65]: {  

curr[65]: {  next[28]: ++  

curr[28]: ++  next[73]: i  

curr[73]: ID  next[72]: ;  
function-definition-list declaration-specifiers declarator { block-item-list do { ++ primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { ++ postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { ++ unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list do { expression 

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list do { expression-statement 
function-definition-list declaration-specifiers declarator { block-item-list do { statement 
function-definition-list declaration-specifiers declarator { block-item-list do { block-item 
function-definition-list declaration-specifiers declarator { block-item-list do { block-item-list 

curr[66]: }  next[21]: while  
function-definition-list declaration-specifiers declarator { block-item-list do compound-statement 
function-definition-list declaration-specifiers declarator { block-item-list do statement 

curr[21]: while  next[67]: (  

curr[67]: (  next[73]: i  

curr[73]: ID  next[40]: <  
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression 

curr[40]: <  next[74]: 10  

curr[74]: 10  next[68]: )  
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < primary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < postfix-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < unary-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < cast-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < multiplicative-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < additive-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression < shift-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( relational-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( equality-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( logical-AND-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( logical-OR-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( conditional-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( assignment-expression 
function-definition-list declaration-specifiers declarator { block-item-list do statement while ( expression 

curr[68]: )  next[72]: ;  

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { block-item-list iteration-statement 
function-definition-list declaration-specifiers declarator { block-item-list statement 
function-definition-list declaration-specifiers declarator { block-item-list block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[66]: }  next[6]: int  
function-definition-list declaration-specifiers declarator compound-statement 
function-definition-list function-definition 
function-definition-list 

curr[6]: int  next[73]: foo  
function-definition-list type-specifier 
function-definition-list declaration-specifiers 

curr[73]: ID  next[67]: (  
function-definition-list declaration-specifiers direct-declarator 

curr[67]: (  next[68]: )  

curr[68]: )  next[65]: {  
function-definition-list declaration-specifiers direct-declarator 
function-definition-list declaration-specifiers declarator 

curr[65]: {  next[17]: return  

curr[17]: return  next[74]: 1  

curr[74]: 1  next[72]: ;  
function-definition-list declaration-specifiers declarator { return primary-expression 
function-definition-list declaration-specifiers declarator { return postfix-expression 
function-definition-list declaration-specifiers declarator { return unary-expression 
function-definition-list declaration-specifiers declarator { return cast-expression 
function-definition-list declaration-specifiers declarator { return multiplicative-expression 
function-definition-list declaration-specifiers declarator { return additive-expression 
function-definition-list declaration-specifiers declarator { return shift-expression 
function-definition-list declaration-specifiers declarator { return relational-expression 
function-definition-list declaration-specifiers declarator { return equality-expression 
function-definition-list declaration-specifiers declarator { return AND-expression 
function-definition-list declaration-specifiers declarator { return exclusive-OR-expression 
function-definition-list declaration-specifiers declarator { return inclusive-OR-expression 
function-definition-list declaration-specifiers declarator { return logical-AND-expression 
function-definition-list declaration-specifiers declarator { return logical-OR-expression 
function-definition-list declaration-specifiers declarator { return conditional-expression 
function-definition-list declaration-specifiers declarator { return assignment-expression 
function-definition-list declaration-specifiers declarator { return expression 

curr[72]: ;  next[66]: }  
function-definition-list declaration-specifiers declarator { jump-statement 
function-definition-list declaration-specifiers declarator { statement 
function-definition-list declaration-specifiers declarator { block-item 
function-definition-list declaration-specifiers declarator { block-item-list 

curr[66]: }  next[0]: NULL  
function-definition-list declaration-specifiers declarator compound-statement 
function-definition-list function-definition 
function-definition-list 
translation-unit 

总结

C语言语法归约到此结束!多余总结不说了,提醒一点吧!文法不是C的全部,它太宽泛了,如果只看它的话,能得到非常复杂的组合出来,真正的C还要包括语义分析部分,也就是说把文法推导出来东西进行有意义化!即文法上推出的东西不是全部都合法的!因此,c只用了文法推导结果中的一个子集,而不是全集!好比汉语词汇组合说出来的东西不是全部都有意义,可以有脏话废话和不是人话^_^,这得需要人大脑,方言规则,社会伦理道德等等来解析!就这么多吧!谢谢你的阅读!

特此声明:
21世纪什么最重要,开源!知识无贵贱,知识无国界!知识需要传播,知识需要应用!不要版权,但要尊重劳动,转载请注明出处!
作者:my_live_123

C语法归约之语句(5)