Javaで四則演算の式を解釈して実行(計算)するクラスをちょっと作ってみた。
コンフィグファイルとかを読み込むルーチンを作ると、こういうのが欲しくなることがある。友人も欲しがってたし。
こういったクラスは絶対どこかで誰かが公開してると思うんだけど…なかなか見つからない。
んで自作してみると、やはりちょいと面倒ながら、面白い。字句解析や構文解析のページをちょっと調べてみると、懐かしのlexやyaccを思い出すなぁ。
今回はそんなに凝る気は無いので適当だけど、括弧の解釈部分なんかは汚くなってしまってちょっと悔しい。
でも他の演算子は比較的容易に追加できるよう作ったつもりなので、そのうちもう少し追加してみよう。
Javaには字句解析用に、StreamTokenizerというクラスがあるらしい。でも
・1つの演算子が2文字以上の場合に対応できない
・数値は自動的に判断できるが、負の符号と減算の演算子を区別できない
・エラーが起きたときに文字列のどの部分で起きたかを表示できない
といった欠点があったので、結局字句解析部分も自作してしまった。
数値判断といえば、十六進数等の文字列をintとかlongに変換するメソッドも無いんだよね…。
逆に数値を十六進数の文字列に変換したり、桁数を指定して0埋めの十進数の文字列に変換したりしたいことがたまにあるんだけど、なんでJavaには書式指定のライブラリが無いんだろうなぁ?
これも絶対どこかで誰かが公開してそうだけどー…。