επιστημη さん 提供の VB.NETプログラムを丸裸にする!? 再帰下降構文解析による 計算式の演算 επιστημη さん 提供の VB.NETプログラムを丸裸にする!? アクア@わんくま同盟
計算式を以下のような仕様である。と考えて構文解析する。 計算式の構文図 計算式を以下のような仕様である。と考えて構文解析する。 式 項 加減演算子 項 因子 乗除演算子 因子 変数又は定数 ()内の式 乗除演算子 × ÷ 加減演算子 + -
式 = 項 + 項 構文図の解説① 計算式の例: 式 = a + b * (c - d) / ( e + f ) ① 式は1つ以上の項と加減演算子により構成されている。 式 項 加減演算子 加減演算子 + - 上記にある計算式の例を①に照らし合わせて分析すると 式 = 項 + 項 となる
式 = 因子 + 因子 * 因子 / 因子 構文図の解説② 計算式の例: 式 = a + b * (c - d) / ( e + f ) ② 項は1つ以上の因子と乗除演算子により構成されている。 項 因子 乗除演算子 乗除演算子 × ÷ 上記にある計算式の例を②に照らし合わせて分析すると 式 = 項 + 項 は 式 = 因子 + 因子 * 因子 / 因子 となる
式= a + b *(別の式)/ (別の式) 構文図の解説③ 計算式の例: 式 = a + b * (c - d) / ( e + f ) ③ 因子は変数または定数と ()←括弧で囲まれた別の式で構成されている。 因子 変数又は定数 ()内の式 上記にある計算式の例を③に照らし合わせて分析すると 式 = 因子 + 因子 * 因子 / 因子 は 式= a + b *(別の式)/ (別の式) となる。 別の式は式として構文図の解説①に戻り、再度分析し、評価を繰り返す。
プログラミングコードの解説 επιστημη さん のプログラムに使われている数式処理の命令文 Sub expression() 命令文 式を構文解説①にある式の処理に当てはめ、項と加減演算子の組み合わせにする。 Sub expression() 命令文 により分類された項の処理は、以下にある Sub term()命令文にて行う。 Sub term() 命令文 式を構文解説②にある項の処理に当てはめ、因子と乗除演算子の組み合わせにする。 Sub term() 命令文 により分類された因子の処理は、以下にある Sub factor()命令文の処理にて行う。 Sub factor() 命令文 式を構文解説③にある因子の処理に当てはめ、変数又は定数と ()←カッコ でくくられた式の組み合わせにする。 Sub factor() 命令文 により分類された項の処理は、上記の Sub expression() 命令文 にて行う。
επιστημη さん の大まかなプログラムフロー プログラミングコードの解説 επιστημη さん の大まかなプログラムフロー Sub Main() dicに変数となる文字と数値を代入 計算式を指定したのち Sub expressionを呼び出す。 Sub expression() その他の命令文 Sub term() 命令文を呼び出す。 スタックをダンプして出力する 文字列の空白を文字単位で精査する といった処理を実行 Sub term() Sub factor() 命令文を呼び出す。 Sub factor() ()で括られた式があれば、 Sub expression () 命令文を呼び出す。
まとめ 決してスゲー事はしていない。でも押さえるトコは抑えとけ! 掲示板にある逆ポーランド記法というキーワードに惑わされるな! 実は再帰下降構文解析が真に押さえるべきキーワード。 Wikipedia :『構文解析』『再帰下降構文解析』 ジェネリック等を使ってるからVB.NETの文法はキッチリ押さえる。 # 自分は未だ使いこなせないけどね♪ 基本となるアルゴリズムは数学でいう公式みたいなもの? 中級者へのステップとして勉強して損はしない!! C++の第一人者がわざわざVB.NETでプログラミングコードを示してくれるその価値を見逃すな!! 上級者が視線を落としてくれるのは我々にもっと切磋琢磨しろ と叱咤激励してくれている!!?? まとめは蛇足!? επιστημηさんへの感謝をこのページに込めたつもり…