タグ: パーサ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[JavaScript] 中置記法の一元一次方程式を解く電卓

前回の記事で書いた電卓を発展させて、簡単な一元一次方程式を解くことのできる電卓にしてみた。xを1つだけ含む一次方程式を解くことができる。

alert(calc('-x+1=2-3'));                   // 2 / 1
alert(calc('3*3/(2-x)=4+(2/3*4)+1.2'));    // 101 / 118
alert(calc('(8-5)/3=1/(x+2)-1.3*0.4'));    // -51 / 38

括弧と単項演算子を使うことができます。今のところ、xは数式中に1つだけしか含めることができません。

実動サンプルとソースコードは続きで。

続きを読む

スポンサーサイト

[JavaScript] 分数で計算する中置記法電卓

前回の記事前々回の記事で書いていた数式パーサと分数クラスを改良して、中置記法の数式を分数のまま計算する電卓を書いた。

最終的な目標は、移項のアルゴリズムを実装して、一元一次方程式を解く電卓を作ることだけど、とりあえずは一段落。

設計

数式パーサを書いた前々回の記事では、数式を解釈して配列を使った構文木を返していたが、今回は配列ではなく、operatoroperand1operand2の3つのフィールドを持つBinaryOperationオブジェクトを使った二分木として返すようにした。

BinaryOperationオブジェクトのoperate()メソッドを呼ぶと、子要素のoperate()メソッドを呼びつつ、適切な演算を行って値を返す仕組み。最末端ノードは、operate()メソッドを実装したFractionクラスを使った。

サンプルコード

var operation = parse('1 + 2 * (3 - 4) / 5');
var answer = operation.operate();
alert(answer);              // 3 / 5
alert(answer.valueOf());    // 0.6

続きを読む

[JavaScript] 正規表現を使ったCSVパーサ

ちょっとした理由から、CSVファイルをJavaScriptで読み込むためのパーサを書きたいと思って、先ほどからがんばってみた。

CSVはいろいろな実装があって正式な仕様がなかなかないらしいけど、考えるのが面倒なのと、Excelが吐くCSVを一応処理できるという理由から、Wikipediaで紹介されていたRFC 4180の形式を採用することに決定。

パーサとかレキサみたいなのは書いたことがないからいびつな仕上がりかも。

続きを読む

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。