表达式 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 是如何解析的?是合法的表达吗?的主要内容,如果未能解决你的问题,请参考以下文章

动手写编译器:左递归消除和无歧义算术表达式解析代码实现

python3 三元表达式,列表解析

三元表达式 列表解析

如何在 C 中使用宏创建表达式?

ACM-ICPC 2018 沈阳赛区网络预赛 B Call of Accepted(表达式求值)

用已知变量解析字符串中的逻辑表达式