3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Javascriptで逆ポーランド記法の式生成と計算

Last updated at Posted at 2017-07-20

#概要
Javascriptで実装した逆ポーランド記法の式生成および計算ライブラリです。
MDNの演算子の優先順位に則った、評価順および結合法則となっています。

中置記法(一般的な数式の記法)から逆ポーランド記法(演算子を後ろに置く記法。後置記法)への変換、逆ポーランド記法の計算を行います。
また関数として解釈する文字列とその演算機能を動的に定義できます。

##GitHub
ReversePolishNotation

##デモ
数式の逆ポーランド記法コンバートと計算実行デモ

##機能
globalにrpnというオブジェクトを追加。

rpn -> function (string):逆ポーランド記法の式評価(計算)
rpn.Generate -> function (string):中置記法から逆ポーランド記法の式を生成
rpn.SetOperate -> function (string, number, function):関数の定義

##使用できる演算子
+ - * / ** % << >> ~ & ^ |

#使用例

##1. 逆ポーランド記法の式生成
rpn( 中置記法の式 )

rpn.Generate("2*(5 + 7)");
// => 2 5 7 + *

//# 累乗を含む計算式
rpn.Generate("4 ** 3 ** 2");
// => 4 3 2 ** **

//# 16進法が扱えます
//# マイナス符号は '_' に変換します(プラス符号は '#' に変換)
rpn.Generate("~-5*4**(0x0f - 12)**2");
// => 5 _ ~ 4 15 12 - 2 ** ** *

##2. 逆ポーランド記法の式計算
rpn( 逆ポーランド記法の式 )

rpn("2 5 7 + *");
// => 24

//# 累乗は右から左に計算します
rpn("4 3 2 ** **");
// => 262144

rpn("5_~4 0x0f 12-2** ** *");
// => 1048576

##3. 演算機能(関数)の追加
rpn.SetOperate( 関数名, 引数の数, 関数本体 )
戻り値は rpn なのでメソッドチェーンが可能。

//# chain method available
//# 正弦関数と余弦関数を定義
rpn.SetOperate("sin", 1, function(arg1){ return Math.sin(arg1*(Math.PI/180)); })
   .SetOperate("cos", 1, function(arg1){ return Math.cos(arg1*(Math.PI/180)); });

//# 実行例
rpn.Generate("sin(45 + 45)");
// => 45 45 + sin
rpn("45 45 + sin");
// => 1
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?