- ベストアンサー
逆ポーランド記法
C言語で逆ポーランド記法への変換をしようとしています. 演算子の優先順位の付け方がわかりません. 構造体の配列に数式を入れて,それぞれに優先度をつけてみたりしたのですが,いい方法でないように思います. 適切な方法を知っている方よろしくお願いします.
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
逆ポーランド記法の特徴、演算子の優先順位など↓ http://ja.wikipedia.org/wiki/%E9%80%86%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95 逆ポーランド記法(後置記法)変換プログラムの例↓ http://www.sra.co.jp/people/miyata/algorithm/postfix.txt
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
LR系の解析手法では「スタックを使って」解析しています. 式の解析に限定しちゃえば「演算子順位解析」あたりが簡単かな. フルスペックの LR を使うほどじゃないし. もちろん LL系, 例えば再帰下降解析も「スタックを使ってる」と言い張ることは可能です.
- sakusaker7
- ベストアンサー率62% (800/1280)
>演算子の優先順位はどのように考えればいいのでしょうか? 乗除算は加減算よりも優先順位が高い とかいうのを使いたい全部の演算子で関係が壊れないように決めればいいだけですが? 左結合の演算子と右結合の演算子(べき乗とか)や、同じ順位の演算子を どうするかという問題はありますけどね。 VB.NET - katamari soulware http://katamari.jp/soulware/index.php/post/category/programming/vbnet 電卓のアルゴリズム http://www.di.takuma-ct.ac.jp/~miyatake/open/calc/calcsimu.html
> スタックを使うのも作ってみたいのですが,演算子の優先順位はどのように考えればいいのでしょうか? スタックは変換した逆ポーランド記法の計算で試してみるのがよいかと思います。
二分木を使えば効率よく実装できると思います。
お礼
ありがとうございます. 早速,作ってみようと思います. スタックを使うのも作ってみたいのですが,演算子の優先順位はどのように考えればいいのでしょうか?