编译原理之算符优先分析的两个有趣小栗子

原创 2018年04月17日 11:25:12

今天上编译原理课时,老师讲了些非常有意思的知识,总结一下,也分享给大家~

先抛出一个小栗子

这里写图片描述

大家思考一下,i + i - i * (i + i)这个运算表达式先算哪部分?

此处思考三分钟。。。。
这里写图片描述

我相信,大多数人和博主一样第一感觉先算括号 里面的,但是理智又告诉我,应该先算左边第一个加号更合适。但是,博主却不能清晰的说出原因。。,,ԾㅂԾ,,

那么我们先来分析,为什么第一感觉会是先算括号里面的呢?

众同学答道:“括号的优先级最高,所以先算括号里面的。”

看着好像。。没什么毛病。。

但是,博主很遗憾的宣布,第一个先运算的是左边的加号。。

为什么呢??(・∀・(・∀・(・∀・*)

事实是这样的:运算符优先级的比较只在相邻的op(运算符)之间进行比较,而总所周知,根据自左向右的结合性,我们再来看上面的小栗子i + i - i * (i + i)里面,首先比较+-的优先级,是同级运算符对不对,那么,我们显然是要从左到右进行运算~ 所以答案和理由就出来咯!o( ̄▽ ̄)ブ

我们再反过来思考一下,为什么我们的第一反应会是括号里面的呢?

某同学回答:“小学数学老师教的。。”

众人大笑~

其实,回想一下,我们小的时候,老师确实让我们先算括号里面的,然后再做乘除,最后做加减。。难道是老师错了?

事实是这样的,其实,那个时候,我们学的叫速算,我们总认为,先把括号里面的值算出来之后,整个表达式会变得简单一点,把乘除做完,整个表达式会变得更简单一点。。没毛病吧~

但是我们的计算器,计算机不是这样计算的,他们只认相邻op(运算符)的优先级别。

到这里,我们应该能够理解正确的运算顺序,以及我们错误的原因啦。。又解决了一个问题,o( ̄▽ ̄)ブ

抛出第二个小栗子

学程序设计基础的时候,我们接触过各种各样的表达式,比如:算数表达式,关系表达式,逻辑表达式等,再细分一下,又有,加法运算表达式,减法运算表达式,赋值运算表达式,逗号运算表达式等。。
栗子来啦~
a = 10 , 5 , 6 这个表达式叫什么名字?
a = (10 , 5 , 6)这个表达式交什么名字?

思考三分钟。。
这里写图片描述

又含有逗号,又含有赋值的表达式叫什么呢?
答案如下:
a = 10 , 5 , 6 这个表达式叫逗号运算表达式。
a = (10 , 5 , 6)这个表达式叫赋值运算表达式。

其实,一个表达式,他叫什么名字,是由最后一个运算符来命名的。。

所以,我们第一个小栗子i + i - i * (i + i)它叫什么名字呢?

某同学回答:“数学表达式。”

我发誓,在课堂那么严肃的地方,我没笑。。

这个表达式叫算术表达式肯定是没毛病的。。具体一点呢?

其实,它叫减法表达式。为什么呢??当然是因为减号最后算咯~

运算顺序:
1. a = i + i
2. b = (i +i)
3. c = i * b
4. d = b - c

PS:配图均来自网络,侵删~

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jane_96/article/details/79971216

编译原理算符优先分析算法

算符优先分析算法          编译原理中自上而下算符优先分析算法是一种“移进-规约”法,本例运用的是编译原理第三版何炎祥中的算符优先分析算法,省去了输出分析过程部分,读者可以参考我发的编译原理语...
  • ye_se_cong_cong
  • ye_se_cong_cong
  • 2017-06-02 18:14:58
  • 1199

编译原理上机作业3——算符优先算法

#include #include #include char grammer[200][200]; char terSymbol[200]; char nterSymbol[200]; int...
  • sambrown123
  • sambrown123
  • 2013-11-09 09:59:38
  • 1415

简单算符优先文法分析程序(编译原理)

题目                       实现算符优先文法分析程序;完成对以下表达式文法的分析程序。        G[E]:             E->E+T             E...
  • khwkhwkhw
  • khwkhwkhw
  • 2015-11-28 23:50:51
  • 4141

Java编译原理写算符优先算法

Java编译原理写算符优先算法
  • coolsunxu
  • coolsunxu
  • 2017-05-14 13:56:59
  • 815

编译原理实验之语法分析(算符优先分析算法(C语言))

#include #include #include #include #include #include #include #include #include #include ...
  • u013486414
  • u013486414
  • 2015-12-08 17:00:22
  • 3966

算符优先分析 编译原理

  • 2011年11月28日 18:01
  • 11KB
  • 下载

编译原理(八) 算符优先分析法(分析过程的算法和C++实现)

前情提要算符优先分析法(构造算法优先关系表)算法描述算符优先关系主要用于界定右句型的句柄: 标记句柄的右端。 发现句柄的过程: 从左端开始扫描串,直到遇到第一个>为止。 向左扫描,跳过所有的=,直...
  • qq_24451605
  • qq_24451605
  • 2015-11-30 10:49:45
  • 3356

编译原理实验四——算符优先文法语法分析

[实验任务]  1、实现算符优先分析算法。2、完成以下描述算术表达式的算符优先文法的算符优先分析过程。G[E]:E→E+T∣E-T∣T            T→T*F∣T/F∣F         F...
  • ffee
  • ffee
  • 2006-06-02 17:17:00
  • 10662

编译原理学习笔记·语法分析(LL(1)分析法/算符优先分析法OPG)及例子详解

语法分析(自顶向下/自底向上) LL(1)分析法 算符优先分析法OPG
  • jave_f
  • jave_f
  • 2017-10-18 20:33:45
  • 937

编译原理 算符优先文法处理 源代码(java)

  • 2013年02月14日 18:15
  • 3KB
  • 下载
收藏助手
不良信息举报
您举报文章:编译原理之算符优先分析的两个有趣小栗子
举报原因:
原因补充:

(最多只允许输入30个字)