阅读背景:

C编译器剖析_3.1 语法分析_C语言的表达式(2)

来源:互联网 

    接下来,我们来分析一下C语言的一元运算表达式,对应的分析函数ParseUnaryExpression()在ucl\type.c中,如图3.1.13所示。由第235至240行的产生式,我们能看到非终结符UnaryExpression有多个侯选式,第254至269行用来处理第237行的侯选式”UnaryOperator  UnaryExpression”。对于表达式”*ptr++”而言,由第236行和第237行的产生式可知,只有分析完了PostfixExpression后缀表达式”ptr++”之后,我们才能得到一元运算符”*”的操作数,进而构成完整的UnaryExpression一元运算表达式”*ptr++”。这实际上意味着在C语言中,形如”++”这样的后缀表达式运算符,要比一元运算符"*"更优先计算的。当然,运算符”++”有”前加加”和”后加加”的区别,例如”++ptr”和”ptr++”,其中,”前加加”是一元运算符,而”后加加”是后缀运算符。在C语言的运算符优先级表中,一般把”++”统一划入“一元运算符”,再规定一元运算符要按从右到左的顺序进行运算,这其实也相当于“后加加”要比其他一元运算符更优先计算。从产生式的角度来理解优先级,则很简单,所有的后缀运算符要先于一元运算符进行计算。同样道理,由C语言标准文法,二元运算表达式BinaryExpression是由一元运算表达式UnaryExpression构成,这意味着只有完成了一元运算表达式的计算,才能进行二元运算表达式的计算,即所有的一元运算符的优先级比二元运算符的优先级更高。简单而言,在C语言运算符优先级上,可粗粗地记为:    接下来,我们来分析一下C语言的一元运算表达式,对应的分析函数ParseUnaryExp




你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: