作成中のJavaの四則演算クラスに変数と代入演算子と、ついでにカンマ演算子を追加。
変数は単純にMapに放り込むことにする。また、先頭が数字から始まるものは数値、それ以外を変数名として認識するという、超アバウト設計(爆)
これにより、アンダーバーだろうがピリオドだろうが日本語だろうがダブルクォーテーションだろうが、演算子として使っていない文字は全て変数名に使えるという…恐ろしい(笑)
代入演算子はちょっとハマった。今までと同じように二項演算子のクラスから派生させてみたけど、「a=b=1」を試してみたら『「a=b」が変数ではない』というエラー。それは確かに変数じゃないよ。
普通の二項演算子は左結合だけど、代入演算子だけは右結合だったんですなぁ。改めて気付く事実。
まぁこれについては昨日三項演算子を作ったときの方法を応用してすぐ修正できた。
(三項演算子も、そういう意味では右結合なんだ)
あとは、Javaには無いけどC言語にあるカンマ演算子を追加。
これが無いと変数の代入を列挙したりできないから。「a=1,b=2,a+b」みたいな。
「&&」が1と0でなく値で表現するようにしたので「(a=1)&&(b=2)&& a+b」で代用できなくはないけど、括弧が余計に必要だし、0を代入するとそこで終わってしまう(爆)
しかもこれ、「(a==1)&&(b==2)&&(a+b !=0)」の間違いに見えるよなー。
指数演算子も追加してみようと思ったけど、単項演算子より優先順位が高いのか低いのかよく分からなかったので保留。
「-」よりは低くていい気もするが、「!」とか「~」よりは高い気がするし。
普通の数学では、「-x^2」(ここでの^はべき乗の意味ね)は、どういう扱いになるんだっけ?
※コメント投稿者のブログIDはブログ作成者のみに通知されます