首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
Scala前缀,中缀及后缀运算详解
时间:
2015-03-19 13:23:56
阅读:
222
评论:
0
收藏:
0
[点我收藏+]
标签:
scala
语法:
PostfixExpr ::= InfixExpr [id [nl]]
InfixExpr ::= PrefixExpr
| InfixExpr id [nl] Inf2424ixExpr
PrefixExpr ::= [?-? | ?+? | ?!? | ?~?] SimpleExpr
表达式由算符和操作数构成。
6.12.1. 前缀运算
前缀运算op e由前缀算符op(必须是?+?, ?-?, ?!?或?~?之一)。表达式op e等价于后缀方法应用e.unary_op。
前缀算符不同于普通的函数应用,他们的操作数表达式不一定是原子的。例如,输入序列-sin(x)读取为-(sin(x)),函数应用negate sin(x)将被解析为将中缀算符sin应用于操作数negate和(x)。
6.12.2. 后缀操作
后缀算符可以是任意标识符。后缀操作e op被解释为e.op。
6.12.3. 中缀操作
中缀算符可以是任意标识符。中缀算符的优先级和相关性定义如下:
中缀算符的优先级由算符的第一个字符确定。字符按照优先级升序在下面列出,同一行中的字符具有同样的优先级。
(所有字母)
|
^
&
< >
= !
:
+ -
* / %
(所有其他特殊字符)
也就是说,由字母开头的算符具有最低的优先级,然后是由?|?开头的算符,下同。
这个规则中有一个例外,就是赋值算符(§6.12.4)。赋值算符的优先级与简单赋值(=)相同。也就是比任何其他算符的优先级要低。
算符的相关性由算符的最后一个字符确定。由?:?结尾的算符是右相关的。其他所有算符是左相关的。
算符的优先级和相关性确定了表达式部件结组的方式:
如果表达式中有多个中缀运算,那么具有高优先级的算符将比优先级低的绑定的更紧。
如果具有连贯的中缀运算e0 op1 e1 op2...opn en,且算符op1,...,opn具有同样的优先级,那么所有的这些算符将具有同样的相关性。如果所有算符都是左相关的,该序列将解析为(...(e0 op1 e1) op2...) opn en。否则,如果所有算符都是右相关的,则该序列将解析为e0 op1(e1 op2 (...opn en)...)
后缀算符的优先级总是比中缀算符低。例如e1 op1 e2 op2总是等价于(e1 op1 e2) op2。
左相关算符的右侧操作数可以由在括号中的几个参数组成,例如e op(e1,...,en)。该表达式将被解析为e.op(e1,...,en)。
左相关位运算e1 op e2解析为e1.op(e2)。如果op是右相关的,同样的运算将被解析为{ val x=e1; e2.op(x) },这里x是一个新的名称。
6.12.4. 赋值算符
赋值算符是一个由等号“=”结尾的算符记号((§1.1)中的语法类op),但具有以下条件的算符除外:
(1) 算符也由等号开始,或
(2) 算符是(<=), (>=), (!=)中的一个
赋值算符做特殊处理,如果没有其它有效的解释,则扩展为赋值。
我们考虑一个赋值算符,比如+=。在中缀运算l += r中,l和r是表达式。该运算可以重新解释为负责赋值的运算
l = l + r
除非该运算的做的l只计算一次
在以下两种条件下会发生再解析。
1. 左侧的l没有一个名为+=的成员,且不能由隐式转换(§6.25)转换为拥有成员+=的值。
2. 赋值运算l = l + r是类型正确的。特别此处暗含了l引用了一个变量或对象,且该变量或对象可以赋值,且可转变为一个具有名为+的成员的值。
Scala前缀,中缀及后缀运算详解
标签:
scala
原文地址:http://blog.csdn.net/crxy2016/article/details/44454995
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!