您的位置:首页 > 其它

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

2014-09-21 19:19 148 查看

1、概要

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

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

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

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



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

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

下篇:高级复合表达式
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  归约 LR 编译原理 c 语法