C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 57 を表示中)
■32534 / )  Re[8]: 電卓 ((1+2)3)カッコの入れ子
□投稿者/ επιστημη (1687回)-(2009/02/08(Sun) 21:14:15)
επιστημη さんの Web サイト
> 今入れ子ではないカッコの時はIndexOfでカッコを探し計算していますが
> 入れ子になった時このままで出来るのか

再帰つかってやれなくもないすね。

exp = "((1 + 2) * (3 + 4)) / 7"
最も外側の()に囲まれる部分を x0 に置き換えます
exp = "x0 / 7", x0 = "(1 + 2) * (3 + 4)"
x0 について同じことをします
exp = "x0 / 7", x0 = "x1 * x2", x1 = "1 + 2", x2 = "3 + 4"
カッコがなくなったら計算します
exp = "x0 / 7", x0 = "x1 * x2", x1 = "3", x2 = "7"
x1, x2 が確定したので元に戻します
exp = "x0 / 7", x0 = "3 * 7"
カッコがなくなったら計算します
exp = "x0 / 7", x0 = "21"
x0 が確定したので元に戻します
exp = "21 / 7"
カッコがなくなったら計算します
exp = "3"

おしまい。
例示した再帰下降パーサも同じことやってると思っていいですね。

返信 編集キー/


管理者用

- Child Tree -