再帰下降構文解析による 計算式の演算 επιστημη さん 提供の VB.NETプログラムを丸裸にする!? アクア@わんくま同盟 計算式の構文図 計算式を以下のような仕様である。と考えて構文解析する。 式 項 加減演算子 項 因子 乗除演算子 因子 変数又は定数 ()内の式 × 乗除演算子 + 加減演算子 ÷ - 構文図の解説① 計算式の例: 式 = a + b * (c - d) / ( e + f ) ① 式は1つ以上の項と加減演算子により構成されている。 式 項 加減演算子 + 加減演算子 - 上記にある計算式の例を①に照らし合わせて分析すると 式=項+項 となる 構文図の解説② 計算式の例: 式 = a + b * (c - d) / ( e + f ) ② 項は1つ以上の因子と乗除演算子により構成されている。 項 因子 乗除演算子 × 乗除演算子 ÷ 上記にある計算式の例を②に照らし合わせて分析すると 式=項+項は 式 = 因子 + 因子 * 因子 / 因子 となる 構文図の解説③ 計算式の例: 式 = 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でプログラミングコードを示して くれるその価値を見逃すな!! 上級者が視線を落としてくれるのは我々にもっと切磋琢磨しろ と叱咤激励してくれている!!?? • まとめは蛇足!? επιστημηさんへの感謝をこのページに込めたつもり…
© Copyright 2024 ExpyDoc