问题标签 [associativity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - 左结合运算符与右结合运算符
如果我们有一个表达式:
$
是左结合运算符,@
是右结合运算符。它们具有相同的优先级。
这个表达式是如何解析的?作为(a $ b) @ c
还是作为a $ (b @ c)
?
c++ - 具有相反关联性顺序的 C++ 重载运算符
很难想出一个标题......(我不是以英语为母语的人。)
此代码按预期编译/工作,但是当我将 a=a+2 更改为 a=2+a 时,它将不再编译。GCC 给了我这个错误:
有没有办法让 2+a 像 a+2 一样工作?
c - C中运算符的优先级和关联性
请看下面的代码片段:
输出:
在语句 2 中,有 4 个不同的运算符。其中()
优先级最高。由于()
运算符的关联性是从左到右,为什么b = 22
而不是21
?
c - 表达式中的括号是否先于其他任何内容进行评估?
在 C 中,操作数的计算顺序与运算符优先级和关联性无关。
假设我在 C: expr1 * expr2 + (expr3 + expr4)
(中间没有序列点) 中有一个表达式。
当评估此表达式时:
由于括号,子表达式 expr3 和 expr4 会在 expr1 和 expr2 之前计算吗?
或者括号是否确保括号内的运算符在括号外的运算符之前被评估?
括号是否确保操作数或运算符的评估顺序?
c++ - 三元运算符和赋值运算符
在C/C++ 三元运算符实际上是否具有与赋值运算符相同的优先级?
Luchian Grigore 的回答说这样的情况
将始终被推断为
因为 = 和 ?: 从右到左关联所以
在 C++ 中
和
两者都很好。
在 C 中
返回错误
上面不应该被推断为(并且不返回错误)
我认为现在它被分组为
这给出了错误,因为在 C(不是在 C++ 中)三元运算符不能返回左值。谁能告诉我在这种情况下如何对运算符进行分组。
c++ - 使用 Boost Spirit 的指数运算符的表达式语法
我想将求幂运算符添加到Boost spirit samples 中提供的表达式语法中。
BNF 语法如下:(参见这个答案,例如:“Unambiguous grammar for exponentiation operation”)
我把它翻译成这样的 Boost 精神:
问题是在这种情况下 ^ 运算符是左关联的,即被2 ^ 3 ^ 4
错误地解析为(2 ^ 3) ^ 4
而不是2^ (3 ^ 4)
.
我如何重写语法以使其^
成为右联想?显然,我在定义中使用的 Kleene 星factor
是不正确的。将语法转换为 Spirit 代码的方法是什么?似乎有一种方法可以从左因子语法转到 Spirit 实现,但我不能立即看到它。
以更正式的方式,Spirit 代码如下所示(在我尝试添加指数之前):
左因子语法是
javascript - Javascript - style.left 将更新减法而不是加法
这里的代码应该通过更新百分比而不是像素来将我的图像对象向左和向右移动。moveLeft 有效,但 moveRight 无效。它与关联性有关吗?
antlr4 - Antlr4 左递归规则似乎产生右关联解析
以下语法说明了这个问题:
给定输入“a,b,c”我得到监听器事件跟踪输出
其中(表示输入 punctuated,)表示exit punctuated,为了简洁明了,省略了所有其他规则。
通过检查,这种侦听器事件的顺序代表了一个右关联解析。
常见做法和 The Definitive Antlr 4 Reference 让我期待左关联解析,对应于以下侦听器事件跟踪
我的语法、我的期望、我对听众事件的解释或其他什么有问题吗?
c - 解释以下 C 程序的输出
当我运行它时,它会给出以下输出。
请解释代码。