码迷,mamicode.com
首页 > 其他好文 > 详细

C语法归约之表达式(3)

时间:2014-09-21 21:22:21      阅读:408      评论:0      收藏:0      [点我收藏+]

标签:归约   lr   编译原理   c   语法   

1、概要

前三篇博文(012)主要讨论是声明和定义的相关语法归约。从这篇文字开始,将开始进行有效的计算,涉及表达式和语句。

首先,表达式和语句这两个概念是不同的,表达式是没有分号(;)的,而表达式+;构成语句。但这不是语句的全部,语句还可以是跳转,迭代,标签语句等等(见图片C语句文法图)!打个比喻来说吧——就是蛋和鸡的关系!当然不是那个悖论,而是表达式是蛋,孵化是分号,鸡是语句。蛋孵化成鸡。鸡肚子里可以有蛋!嘎嘎!二者区别必须明白。不能混为一谈!

在C语言中,如果单纯就表达式计算而言,表达式就是一个人,而分号;好似一张毕业证,有它你就是正规的劳动人员,哪怕你什么都不干什么都不会(比如单个分号;)而没它,你就是没户口的黑孩,不能参与计算劳动,编译器抱怨的不得了,就是不让你上岗运行!

其次,说到表达式,运算符的优先级问题就不得不提一提了。C中的优先级是由表达式文法决定的!当初学C的时候都是死记硬背的,那时候觉得这个优先级是C它爹里奇严格要求,每次运算的时候都要检测后面的优先级,看它是不是比当前运算符优先级高。而且一直觉得编译器也是这样做的。而事实上不是,广义上讲是严格要求,因为它已经写入了文法,归约顺序是固定的,就像法律条文一样,是严格约束的;但是从狭义上而论。这个优先级是很自然的事情,不需要摇头晃脑的背,也不用比较优先级高低来实现,而是语法归约过程很自然的东西。一级一级的归约,一级一级的蹦哒,到了哪个阶段,那个阶段归约,优先级自然就隐含在里面了!它们的归约顺序决定了它们优先级!

bubuko.com,布布扣


通过表达式对归约过程的理解,把它画成一个顺时钟的表圈更直观!如上图所示!(图片较大,另存为下载可正常查阅)

在中心处写了一段:运算符的结合只能从高到低而不能逆向进行(归约箭头方向决定了),较低运算符优先结合的方法是使用()在零点方向。()是相当复位运算符,使得较低运算符能够回到最高优先级处改变运算符结合顺序!这样较低运算符能够先运算之后再和较高运算符结合;注意归约过程不会跳跃!(下文示例可以得知这一点)即向‘上游’运算符结合,必须顺时钟走一圈,并且使用了(),否则达到零点前expression处就归约停止!

举个简单例子帮助理解这一段话:a+1<<8和a+(1<<8)

a+1<<8归约过程
a是id->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expre->additive-expr(暂停)
+
1是constant->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expr(暂停)
然后additive-expr+mul-expr->additive-expr->shift-expr
<<
8是constant->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expr->additive-expre(暂停)
shift-expr<<additive-expr->shift-expr->relational-expr->equality-expr->...->expr(暂停)
a+(1<<8)归约过程
a是id->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expr->additive-expr(暂停)
+
(
1是constant->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expr->additive-expr->shift-expr(暂停)
<<
8是constant->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expr->additive-expr(暂停)
shift-expr<<additive-expr->shift-expr->relational-expr->equality-expr->...->expr(暂停)
)
(expr)->primary-expr->postfix-expr->unary-expr->cast-expr->mul-expr
additive-expr+mul-expr->additive-expr->shift-expr->...->expr

注意区分它们的不同!或许你会问如何知道到什么时候需要暂停,什么时候继续归约?答案就在非终结符的follow基上!什么是follow集以及first基,请参与《编译原理》第4章语法分析部分!这里就不重述了!

在这里你只需要知道:当下一个运算符是当前非终结符要归约到的非终结符的follow基时,则继续归约,否则暂停。比如上面这个例子1的归约shift-expression的follow基包含<<,那么additive-expression就需要归约到shift-expression,再往下,relational-expression的follow基不包含<<,所以shift-expression就到此暂停,不能再归约下去!而等待其他部分(<< 和additive-expression)到来,再一起归约!

如果上文看不懂,不要紧,在下面的示例中会给出很多组合范例,可以多看几个就理解了,当然你要结合C99文法或者上图来理解!

最后,为了更好描述原理,这里要相对前面的声明定义而言做些调整!单个示例进行提示!表达式示例分两大类,基本常用和高级复合!在此文将给出基本常用表达式归约。下一篇给出复合表达式归约。

输出依旧老风格,整个归约栈,其实是一颗树,只不过是栈的形式描述的。每次归约都是从孩子到父亲的建树过程,因为这是LR(1),自底向上!(LL正好相反,自顶向下)整个归约纳入一个函数当中,每次栈的输出开头“declaration-specifiers declarator { block-item-list“它属于函数归约的部分,压在栈中而已,可以忽略不看,重点在表达式的归约上!另外,表达式之间过度部分如下,也可以忽略不看!

declaration-specifiers declarator { expression-statement
declaration-specifiers declarator { statement
declaration-specifiers declarator { block-item
declaration-specifiers declarator { block-item-list

2、表达式归约

2.1、基本表达式

示例代码
void basic_exp()
{
	left = a[i]; 
	left = i++; 
	left = i--; 
	left = fun(i); 
	left = girl.age;
	left = girl->wight;
	left = ++i;
	left = --i;
	left = *a;
	left = &a;
	left = !a;
	left = ~a;
	left = +a;
	left = -a;
	left = sizeof(int);
	left = (int *)a;
	left = a * b;
	left = a / b;
	left = a % b;
	left = a + b;
	left = a - b;
	left = a << 1;
	left = b >> 1;
	left = a > b;
	left = a < b;
	left = a <= b;
	left = a >= b;
	left = a != b;
	left = a == b;
	left = a & b;
	left = a ^ b;
	left = a | b;
	left = a && b;
	left = a || b;
	left = a > b ? a : b;
	left = a = 1;
	left = a >>= 1;
	left = a, b;
	left = (a + b) * c;
}
归约过程
void basic_exp()

{

curr: void  next: basic_exp  
type-specifier 
declaration-specifiers 

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

curr: (  next: )  

curr: )  next: {  
declaration-specifiers direct-declarator 
declaration-specifiers declarator 

curr: {  next: left  

left = a[i];

curr: ID  next: =  
declaration-specifiers declarator { primary-expression 
declaration-specifiers declarator { postfix-expression 
declaration-specifiers declarator { unary-expression 

curr: =  next: a  
declaration-specifiers declarator { unary-expression assignment-operator 

curr: ID  next: [  
declaration-specifiers declarator { unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { unary-expression assignment-operator postfix-expression 

curr: [  next: i  

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

curr: ]  next: ;  
declaration-specifiers declarator { unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { assignment-expression 
declaration-specifiers declarator { expression 

curr: ;  next: left  
declaration-specifiers declarator { expression-statement 
declaration-specifiers declarator { statement 
declaration-specifiers declarator { block-item 
declaration-specifiers declarator { block-item-list 
left = i--;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: i  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: --  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 

curr: --  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = fun(i);
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: fun  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: (  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 

curr: (  next: i  

curr: ID  next: )  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( assignment-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression ( argument-expression-list 

curr: )  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = girl.age;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: girl  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: .  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 

curr: .  next: age  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = girl->wight;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: girl  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: ->  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 

curr: ->  next: wight  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = ++i;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: ++  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ++  next: i  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ++ primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ++ postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ++ unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = --i;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: --  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: --  next: i  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator -- primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator -- postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator -- unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = *a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: *  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: *  next: a  
here
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator 

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = &a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: &  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: &  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator 

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = !a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: !  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: !  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator 

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = ~a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: ~  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ~  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator 

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = +a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: +  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: +  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator 

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = -a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: -  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: -  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator 

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = sizeof(int);
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: sizeof  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: sizeof  next: (  

curr: (  next: int  

curr: int  next: )  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator sizeof ( type-specifier 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator sizeof ( specifier-qualifier-list 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator sizeof ( type-name 

curr: )  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = (int *)a;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: (  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: (  next: int  

curr: int  next: *  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( type-specifier 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( specifier-qualifier-list 

curr: *  next: )  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( specifier-qualifier-list pointer 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( specifier-qualifier-list abstract-declarator 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( type-name 

curr: )  next: a  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( type-name ) primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( type-name ) postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( type-name ) unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( type-name ) cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a * b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: *  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 

curr: *  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a / b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: /  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 

curr: /  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression / primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression / postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression / unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression / cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a % b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: %  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 

curr: %  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression % primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression % postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression % unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression % cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a + b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: +  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 

curr: +  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression + primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression + postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression + unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression + cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression + multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a - b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: -  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 

curr: -  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression - primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression - postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression - unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression - cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression - multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a << 1;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: <<  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 

curr: <<  next: 1  

curr: 1  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression << primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression << postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression << unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression << cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression << multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression << additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = b >> 1;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: b  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: >>  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 

curr: >>  next: 1  

curr: 1  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression >> primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression >> postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression >> unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression >> cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression >> multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression >> additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a > b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: >  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 

curr: >  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a < b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: <  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 

curr: <  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression < shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a <= b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: <=  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 

curr: <=  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression <= shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = a >= b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: >=  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 

curr: >=  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression >= shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = a != b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: !=  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 

curr: !=  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression != relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = a == b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: ==  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 

curr: ==  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression == relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a & b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: &  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 

curr: &  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression & equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = a ^ b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: ^  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 

curr: ^  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression ^ AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = a | b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: |  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 

curr: |  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression | exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a && b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: &&  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 

curr: &&  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression && inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a || b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: ||  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 

curr: ||  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression || logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a > b ? a : b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: >  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 

curr: >  next: b  

curr: ID  next: ?  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression > shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 

curr: ?  next: a  

curr: ID  next: :  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? assignment-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression 

curr: :  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression ? expression : conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a >>= 1;//其余赋值运算符都一样过程
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: >>=  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 

curr: >>=  next: 1  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator 

curr: 1  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 
left = a, b;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: a  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: ID  next: ,  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ,  next: b  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list expression , primary-expression 
declaration-specifiers declarator { block-item-list expression , postfix-expression 
declaration-specifiers declarator { block-item-list expression , unary-expression 
declaration-specifiers declarator { block-item-list expression , cast-expression 
declaration-specifiers declarator { block-item-list expression , multiplicative-expression 
declaration-specifiers declarator { block-item-list expression , additive-expression 
declaration-specifiers declarator { block-item-list expression , shift-expression 
declaration-specifiers declarator { block-item-list expression , relational-expression 
declaration-specifiers declarator { block-item-list expression , equality-expression 
declaration-specifiers declarator { block-item-list expression , AND-expression 
declaration-specifiers declarator { block-item-list expression , exclusive-OR-expression 
declaration-specifiers declarator { block-item-list expression , inclusive-OR-expression 
declaration-specifiers declarator { block-item-list expression , logical-AND-expression 
declaration-specifiers declarator { block-item-list expression , logical-OR-expression 
declaration-specifiers declarator { block-item-list expression , conditional-expression 
declaration-specifiers declarator { block-item-list expression , assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: left  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list
left = (a + b) * c;
curr: ID  next: =  
declaration-specifiers declarator { block-item-list primary-expression 
declaration-specifiers declarator { block-item-list postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression 

curr: =  next: (  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator 

curr: (  next: a  

curr: ID  next: +  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression 

curr: +  next: b  

curr: ID  next: )  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression + primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression + postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression + unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression + cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression + multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( assignment-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator ( expression 

curr: )  next: *  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 

curr: *  next: c  

curr: ID  next: ;  
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * primary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * postfix-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * unary-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression * cast-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator multiplicative-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator additive-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator shift-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator relational-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator equality-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator exclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator inclusive-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-AND-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator logical-OR-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator conditional-expression 
declaration-specifiers declarator { block-item-list unary-expression assignment-operator assignment-expression 
declaration-specifiers declarator { block-item-list assignment-expression 
declaration-specifiers declarator { block-item-list expression 

curr: ;  next: }  
declaration-specifiers declarator { block-item-list expression-statement 
declaration-specifiers declarator { block-item-list statement 
declaration-specifiers declarator { block-item-list block-item 
declaration-specifiers declarator { block-item-list 

curr: }  next: NULL  
declaration-specifiers declarator compound-statement 
function-definition 
function-definition-list 
translation-unit 
总结
你会发现相同优先级的运算符,它们归约过程完全一样,比如*/%,再比如< > <= >=,而不同优先级的运算符归约过程略有区别!总体都相似,都是围绕表盘顺时钟转一圈!在下文当中,你将会看到复合表达式中,它将非常喜欢转圈圈!^!^!

声明:写了前三篇,发现已经被爬虫爬走了,爬走就爬走呗,这没啥,关键是没有注明来源,实在是不尊重我的劳动!别人还因为我抄他的呢!!!
特此声明:
21世纪什么最重要,开源!知识无贵贱,知识无国界!知识需要传播,知识需要应用!不要版权,但要尊重劳动,转载请注明出处!
作者:my_live_123

下篇:高级复合表达式

C语法归约之表达式(3)

标签:归约   lr   编译原理   c   语法   

原文地址:http://blog.csdn.net/cwcmcw/article/details/39449795

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!