
No.2ベストアンサー
- 回答日時:
お手軽に作りたいなら #1 の再帰下降解析がお勧め. 「入力された式をすぐに計算してそれでおしまい」のときには関数から return するときに「自分が担当した部分式の結果」を返せばいいし, 「入力した式を一度記憶して, あとで計算する」という形であっても入力された式を簡単に「構文木」に変換できます. いずれにしても, 「基本パターン」はできあがっているので, パターンに従う限り間違いようがないはずです.
問題点は複雑な構文になると「再帰がとても深くなる」ことで, これがいやだと LR系 (式の解析なら演算子順位解析あたり) を使うことになります. 演算子順位解析は「スタックを使って式を RPN に変換する標準的な方法」とほぼ同じで, バックエンド (あとで計算するところ) に RPN を使うなら扱いやすいかと思います. ただし, スタックの管理を自分でやらないといけないので変なところを間違える可能性はあります.
ちなみに最近のコンパイラでは RPN を使うことはほとんどないはずです. 普通は構文木を作って, その上で最適化とかかけていくんじゃないかな.
念の為指摘しておきますが「RPN」は表現方法, 「再帰下降解析」は解析方法であってこの 2つは相反するものではありません>#1. 普通はしないけど「再帰下降解析で解析して RPN で記憶する」ことも可能です... ま, しないけど.
色々とアドバイスありがとうございます。
やはり「逆ポーランド記法」なんて時代遅れのようですね。
日進月歩のこの分野で30年以上も前の手法をいつまでも使ってる分けないですね・・・・・
昔人間なので「演算子順位解析」、「構文木」、「再帰下降解析」等よく判っていません、若い人にもう少し調べてから最適な方法を検討してみます。
アドバイス有りがとうございました。
No.1
- 回答日時:
★再帰下降構文解析
・逆ポーランド記法以外にも『再帰下降構文解析』という方法もあります。
これは再帰関数を使って数式を計算します。
例えば
(1)Factor()…数値、変数、括弧
(2)MulDiv()…乗算、除算、剰余
(3)AddSub()…加算、減算
(4)Compare()…比較
(5)Express()…数式評価
このような関数を用意して
Express()→Compare()→AddSub()→MulDiv()→Factor()→Express()
と再帰呼び出しを行うだけで加減算よりも乗除算を優先して計算してくれます。
下に参考になりそうなリンクを貼って置きます。
参考URL:http://ruffnex.oc.to/kenji/src/dentaku2.c
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# 逆ポーランド法の計算について 3 2023/05/27 00:53
- 政治 ポーランドの損害に比べたら韓国の損害など取るに足りませんよね?それなのに何故文句を言ってますか? 8 2023/03/07 15:41
- システム CPUの問題について 2 2022/07/09 12:04
- 物理学 スピン 行列表示 固有状態 測定値 1 2022/08/16 18:39
- その他(プログラミング・Web制作) プログラミングって本来数学的な計算をする為のものではないのですか? 学校で配られたFortran90 11 2022/08/25 22:14
- 高校 有効数字計算 確定した値を含む 2 2023/01/18 06:03
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- 化学 [例題①]プロパンのOHとの反応速度定数を k=1.0×10⁻¹²cm³s⁻¹、 [OH]=1.0× 0 2023/05/28 13:12
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
2進数の足し算(C言語)
-
有効数字について 以前質問をし...
-
16進数 加算 減算 C言語
-
O(n log n)について2
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
ExcelでPC(パソコン)によって...
-
VB.net Double と...
-
VB6.0での小数点の扱いについて
-
CRCの計算方法について
-
『浮動小数点』について
-
BCD・HEX・BINについて
-
数値の誤差
-
c言語で変数の型の有効範囲を...
-
2進数データのビット演算
-
MATLABでの行列の全要素の和
-
三菱シーケンサ(Aシリーズ)で...
-
除算を使わずに10で割りたい。
-
「Aに対するBの割合」と「Aに対...
-
C言語での引数の省略方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ExcelでPC(パソコン)によって...
-
O(n log n)について2
-
有効数字について 以前質問をし...
-
c languageで 簡単な質問があ...
-
ExcelのINT関数の計算結果がお...
-
EXCELの関数"STDEV(標準偏差)"...
-
三菱シーケンサ(Aシリーズ)で...
-
VB.net Double と...
-
計算の丸め誤差の解消について
-
除算を使わずに10で割りたい。
-
2進数の足し算(C言語)
-
16進数 加算 減算 C言語
-
”/”を使わずに割り算したいんで...
-
CRCの計算方法について
-
VB6.0での小数点の扱いについて
-
VBAでミリ秒まで出力する方法
-
時刻の比較
-
2進数データのビット演算
-
教えて小数点の比較!(C言語)
-
C言語 型変換のタイミング
おすすめ情報