表达式 x---y 是如何解析的?是合法的表达吗?
Posted
技术标签:
【中文标题】表达式 x---y 是如何解析的?是合法的表达吗?【英文标题】:How is the expression x---y parsed? Is it a legal expression? 【发布时间】:2011-04-13 12:40:13 【问题描述】:表达式x---y
是如何解析的?是合法的表达方式吗?
【问题讨论】:
***.com/questions/5341202(及其答案)可能很有趣。 看到这个Maximal Munch Principle. 【参考方案1】:合法,解析为x--
-
y
。
我相信前两个减号被解释为后减运算符,因为它是合法出现的x
之后的最长标记。这使得第三个减号起到减法的作用。
这符合Maximal Much Rule[1]
[1]。 http://en.wikipedia.org/wiki/Maximal_munch
【讨论】:
【参考方案2】:对于所有数据类型,它被解析为x-- - y
。如果是 class
对象,那么你必须定义 post decrement 运算符和 minus 运算符,如果你只定义 pre decrement 会产生编译错误> 运算符。这意味着,x-- - y
在任何情况下都是强制的。
【讨论】:
【参考方案3】:这与运算符优先级有关。看看这个table。
递减/递增运算符优先于算术运算。它将被解析为x-- - y
。
纠正我的答案:解析器首先匹配最长的标记,因此--
被选择而不是算术-
。导致表达式被解析为x-- - y
【讨论】:
+1 用于提及运算符优先级和链接源。 标记化规则,而不是运算符优先级。 这与优先级无关,而与语言的解析方式有关。--
被选为第一个标记,因为它是给出有效标记的最长序列。这与运算符优先级无关。
表达式---x
被标记为-- - x
,尽管前缀--
的优先级高于一元-
。 (这对于内置类型无效,但对于具有奇怪的重载运算符的类来说可能没问题。)令牌解析只是“贪婪”并且尽可能快地获取尽可能多的字符。【参考方案4】:
(x--)-y;你使用哪个编译器? x 和 y 的类型是什么?
【讨论】:
以上是关于表达式 x---y 是如何解析的?是合法的表达吗?的主要内容,如果未能解决你的问题,请参考以下文章