記事
演算子の結合規則のバリエーションについて
2023-12-04 (更新: 2023-12-12) / 読むのにかかる時間: 約11.1分
最近RPrecという演算子の優先順位に基づいて構文解析を行うRubyのライブラリを実装しました。 その中で、演算子の優先順位と結合順位についての理解が深まりました。
演算子の優先順位 (precedence) というのは、1 + 2 * 3が1 + (2 * 3)と解釈されて「*は+よりもつよく結合する」というように言われるものです。
この優先順位はJavaScriptであればこの辺りに、Rubyであればこの辺りにまとまっています。
そして、演算子の結合規則 (associativity) というのは、左結合とか右結合とか言われるものです。
1 + 2 + 3は(1 + 2) + 3と解釈されるので+は左結合であったり、a = b = 1がa = (b = 1)と解釈されるので=は右結合というようなものです。
今回は、この演算子の結合規則のバリエーションについて考察したことについて、まとめたいと思います。
想定読者: 構文解析やプログラミング言語の構文に興味があり、これらについて多少の知識があることを想定しています。